Типы запросов Java в App Engine - PullRequest
       22

Типы запросов Java в App Engine

2 голосов
/ 07 февраля 2010

Я понимаю, что здесь уже есть много вопросов о запросах к хранилищу данных App Engine, но я хочу узнать мнение по моему конкретному случаю.

Я запрашиваю оценки, чтобы построить таблицу рекордов, поэтому я хочу, чтобы они упорядочивались по убыванию оценок. Теперь две оценки могут иметь одно и то же значение, поэтому пролистывание на основе этого значения невозможно, так как в итоге вы можете пропустить оценки на основе фильтра страницы.

Я хочу построить запрос на основе динамической даты. Например, 10 лучших результатов за последний месяц. Как лучше всего это сделать?

Я, очевидно, не хочу каждый раз просматривать каждый счет. Нужно ли загружать эти оценки в memcache и обновлять, когда отправленный счет больше, чем один из лучших 10? Это не имеет смысла, потому что я должен был бы заранее определить свои временные диапазоны, но настроить хрон, чтобы обновлять его каждый день, чтобы получить результаты, которые достигли предельного времени, было бы выполнимо. Может ли это быть сделано эффективно динамично? Другой вариант - просто запускать cron через все ноты каждые N часов или что-то в этом роде, но я бы действительно предпочел не делать этого.

Есть ли литература, которая помогла бы мне принять эти решения?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2010

Три варианта:

  1. Вы все еще можете разбивать на страницы «наивно» - все запросы имеют свой ключ в качестве неявного окончательного порядка сортировки, поэтому вам просто нужно включить ключ в свою нумерацию страниц.
  2. Использовать новую поддержку курсора запроса
  3. Сделайте то, что сделали авторы этой библиотеки , и постройте дерево записей партитур.
0 голосов
/ 07 февраля 2010

Итак, вот одно решение, которое я получил, но, вероятно, не самый предпочтительный способ сделать что-либо.

В своем классе Score я добавил переменную Long. Когда я устанавливаю дату, я удаляю часы, минуты, секунды и миллисекунды и выполняю getTime ().

Когда запрос происходит за N дней или N месяцев, я сгенерирую проверки на равенство на много дней в строке запроса: "dateAsLong == N дней назад || dateAsLong == N - 1 дней назад" и т. д. и т. д.

Этот запрос работает до 29 дней, прежде чем я улавливаю «Недопустимый аргумент» при попытке .execute (). Я предполагаю, что достигаю некоторого максимума по длине запроса или количеству фильтров. Любой дольше потребует разделения запроса, что очень выполнимо. Затем списки могут быть взяты и добавлены.

Ограничение выполнения этого способа - это время и процессор, на которые затрачивается запрос. При запросе за последние 29 дней запрос занимает около 550 мс и 750 мс процессорного времени.

...