Google App Engine и пейджинг - PullRequest
8 голосов
/ 16 апреля 2010

Как можно написать запрос, который выбирает элементы 2000-2010 из набора из 10000 объектов в хранилище данных.

Я знаю, что это можно сделать в GQL следующим образом:

select * from MyObject limit 10 offset 2000

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

Есть ли лучший способ?Например, использование псевдо ROWNUM столбца, как в других типах хранилищ данных.

Ответы [ 2 ]

6 голосов
/ 16 апреля 2010

Нет способа эффективно использовать страницы со смещением, кроме как для кэширования результатов.Однако вы можете использовать курсоры хранилища данных для реализации подкачки с использованием подхода типа «закладка».

2 голосов
/ 18 апреля 2010

Помимо использования курсоров вы также можете использовать подход порядка сортировки. Например:

SELECT * FROM MyObject ORDER BY field LIMIT 10;

для первых 10 объектов, а затем для следующих 10 объектов и т. Д.

SELECT * FROM MyObject WHERE field > largestFieldValueFromPreviousResult ORDER BY field LIMIT 10;

Поле может быть даже ключевым, если у вас нет другого подходящего поля. Вот более полный пример:

http://code.google.com/appengine/articles/paging.html

...