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;

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

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

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