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