Может быть и то и другое; -)
Если вы выполняете 400 запросов к таблице наград, по одному на каждый результат, возвращаемый для запроса в таблице сопоставления, то я ожидаю, что это будет болезненно. Ограничение на 1000 результатов для запросов существует, поскольку BigTable считает, что возвращение 1000 результатов находится на пределе его способности работать в разумные сроки. Исходя из архитектуры, я ожидаю, что 400 запросов будут работать намного медленнее, чем один запрос, возвращающий 400 результатов (400 log N против (log M) + 400).
Хорошей новостью является то, что в GAE Memcache одной хеш-таблицы, содержащей все награды и значения их очков, довольно прост (ну, выглядел довольно просто, когда я некоторое время назад просматривал документы memcache. Мне не нужно) сделать это еще).
Кроме того, если вы еще не знали, for result in query.fetch(1000)
намного быстрее, чем for result in query
, и вы в любом случае ограничены 1000 результатами. Преимущества последнего состоят в том, что (1) это может быть быстрее, если вы покинете досрочно, и (2) если Google когда-либо увеличит лимит свыше 1000, он получит преимущество без изменения кода.
У вас также могут возникнуть проблемы при удалении пользователя (или вознаграждения). Я обнаружил, что в одном тесте я могу удалить 300 объектов за установленный срок. Эти объекты были более сложными, чем ваши объекты отображения, и имели 3 свойства и 5 индексов (включая неявные), в то время как ваша таблица отображения, вероятно, имеет только 2 свойства и 2 (неявных) индекса. [Edit: только что понял, что я сделал этот тест, прежде чем я знал, что db.delete () может взять список, который, вероятно, намного быстрее].
BigTable не обязательно делает то, для чего хорошо подходят реляционные базы данных. Вместо этого он хорошо распределяет данные по многим узлам. Но почти все веб-сайты работают нормально с узким местом на одном сервере БД, и, следовательно, строго не нуждаются в том, что делает BigTable.
Еще одна вещь: если вы выполняете 400 запросов к хранилищу данных по одному HTTP-запросу, то вы обнаружите, что достигли фиксированной квоты хранилища данных задолго до того, как достигли фиксированной квоты запроса. Конечно, если вы находитесь в рамках квот, или если вы сначала нажали на что-то другое, это может быть неактуально для вашего приложения. Но соотношение между этими двумя квотами составляет примерно 8: 1, и я воспринимаю это как намек на то, как Google ожидает, что моя модель данных будет выглядеть.