7

Я использую как ndb, так и search-api запросов в моем проекте app-проекта python.Как работают приложения-курсоры?

Единственные официальные документы на курсоров я могу найти:

После вещей не ясны для меня:

  1. Что такое время, чтобы курсор -жить ? Могу ли я выставлять летние курсоры?
  2. Как будет выглядеть разбиение на страницы в случае, если элементы добавляются/удаляются из оригинальной коллекции? (+, если курсор указывает на конкретную запись, что произойдет, если эта запись больше не существует?)
  3. Как влияет порядок заказа?
  4. Существуют ли какие-либо принципиальные различия между курсорами ndb и search-api?
+2

некоторые из них находятся в подробных статьях приложения в своем блоге. согласитесь, это должно быть также в документах. –

ответ

6

Я отвечаю от ndb перспективных, я не использовал API поиска. Все цитаты из вашей первой ссылки.

в течение 1 и 3 (как упорядочение рассматривается как часть первоначального запроса от курсоров перспективного):

Для загрузки дополнительных результатов с точкой курсора, то приложение подготавливает подобный запрос с тем же сущность рода, фильтры и сортировки заказов, и передает указатель на метод в запросе with_cursor() перед выполнением извлечения

Так что на самом деле не важно, сколько лет находится курсор (т.е. сколько лет его запрос есть), поскольку его исходный запрос должен быть восстановлен для получения курсора.

Для 2:

Курсоры и обновления данных

Позиция курсора определяется как место в списке результатов после последнего возвращаемый результат. Курсор не является относительным положением в списке (это не смещение); это маркер, на который Cloud Datastore может прыгать при запуске сканирования индекса для результатов. Если результаты запроса изменяются между использованием курсора, уведомления о запросе меняют только , которые появляются в результатах после курсора. Если перед появился новый результат, позиция курсора для запроса не будет возвращена, когда результаты будут получены после ввода курсора. Точно так же, если объект не дольше результат для запроса, но появился перед курсором, результаты , которые появляются после того, как курсор не изменяется. Если последний результат возвращен, удаляется из результирующего набора, курсор все еще знает, как найти следующий результат.

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

Java-эквивалент страницы в Limitations of cursors упоминает некоторые ошибки, которые могут быть подняты на несоответствие:

New App Engine релизы может изменить внутренние детали реализации, недействительности курсоров, которые зависят от них. Если приложение пытается использовать для использования курсора, который больше не действителен, Cloud Datastore создает IllegalArgumentException (низкоуровневый API), JDOFatalUserException (JDO) или PersistenceException (JPA).

Я подозреваемый Python будет повышение некоторых подобных ошибок, а также.

+0

Отличный вопрос, и отличный ответ. Узнал что-то сегодня. :) – GAEfan

+0

Спасибо за ваш ответ. Но он не отвечает на все подзапросы, также поиск-api не распространяется вообще – glmvrml