Нахождение наибольшего значения индексированного свойства в AppEngine
Допустим, у меня есть несколько сущностей, хранящихся в хранилище данных AppEngine, которые имеют индексированное числовое свойство, и мне нужно найти наибольшее существующее в настоящее время значение.
Я мог бы просто выполнить проекционный запрос, отсортированный по этому свойству, с нисходящим порядком сортировки и пределом 1. Возвращенный результат будет содержать мой ответ.
Это лучший подход или есть более эффективный способ получить это значение?
(Согласованность в этом случае не слишком беспокоит. Если я пропущу пару значений, которые передаются одновременно, меня это не сильно волнует. Поэтому здесь нет необходимости в транзакциях.)
1 ответ
Поскольку хранилище данных GAE не имеет эквивалента MAX
в базе данных SQL действительно лучше упорядочить по столбцу и получить первую запись. Например:
max_val = MyEntity.query().order(-MyEntity.my_numeric_field).get().my_numeric_field
Смотрите также обсуждение этого форума.
Второй вариант - сохранить максимальное значение в каком-либо другом объекте, а затем обновлять его (возможно, в транзакции) всякий раз, когда вы добавляете один из первых объектов.