Нахождение наибольшего значения индексированного свойства в AppEngine

Допустим, у меня есть несколько сущностей, хранящихся в хранилище данных AppEngine, которые имеют индексированное числовое свойство, и мне нужно найти наибольшее существующее в настоящее время значение.

Я мог бы просто выполнить проекционный запрос, отсортированный по этому свойству, с нисходящим порядком сортировки и пределом 1. Возвращенный результат будет содержать мой ответ.

Это лучший подход или есть более эффективный способ получить это значение?

(Согласованность в этом случае не слишком беспокоит. Если я пропущу пару значений, которые передаются одновременно, меня это не сильно волнует. Поэтому здесь нет необходимости в транзакциях.)

1 ответ

Решение

Поскольку хранилище данных GAE не имеет эквивалента MAX в базе данных SQL действительно лучше упорядочить по столбцу и получить первую запись. Например:

max_val = MyEntity.query().order(-MyEntity.my_numeric_field).get().my_numeric_field

Смотрите также обсуждение этого форума.

Второй вариант - сохранить максимальное значение в каком-либо другом объекте, а затем обновлять его (возможно, в транзакции) всякий раз, когда вы добавляете один из первых объектов.

Другие вопросы по тегам