Google App Engine и пейджинг
-
27-09-2019 - |
Вопрос
Как можно было бы написать запрос, который выбирает товары 2000-2010 из коллекции 10000 объектов в хранилище данных.
Я знаю, что это можно сделать подобное в GQL:
select * from MyObject limit 10 offset 2000
Согласно документация, при использовании offset
Двигатель все еще будет получать все строки, только не возвращает их, что делает запрос выполнять таким образом, который соответствует линейному значению со значением offset
.
Есть ли лучший способ? Например, использование псевдо ROWNUM
Колонна, как можно сделать в других типах хранилище данных.
Решение
Нет никакого способа эффективной страницы, используя смещения, за исключением кэширования результатов. Вы можете, однако, использовать Cursors Cursors Чтобы реализовать пейджинг, используя тип «закладки».
Другие советы
Помимо использования курсоров, вы также можете использовать подход по заказу сортировки. Например:
SELECT * FROM MyObject ORDER BY field LIMIT 10;
для первых 10 объектов, а затем для следующих 10 объектов и т. Д.
SELECT * FROM MyObject WHERE field > largestFieldValueFromPreviousResult ORDER BY field LIMIT 10;
Поле может даже быть ключом, если у вас нет другого подходящего поля. Вот более полный пример: