2013-10-12 3 views
1

У меня есть запрос в моем живом приложении, которая прошла «нечетный» ...AppEngine NDB запросы возвращают разные результаты

Запуск 1.8.4 SDK ... 1.8.5 живого экземпляра с помощью Python 2.7

Измерение представляет собой модель NDB ... с строковое свойство называется статусом и ключевое свойство называется активом ....

(Глубоко в моем обработчика кода ....)

cursor=None 
limit=10 
asset_key = <a key to an actual asset> 
qry = Measurement.query(
    Measurement.status=='PENDING', 
    Measurement.asset=asset_key) 
results, cursor, more = qry.fetch_page(page_size=limit, start_cursor=cursor) 

теперь странная вещь если я запускаю это иногда, я et 4, а иногда только 1. (правильный ответ 4) ....

Дамп запроса точно такой же ... курсор установлен на None ... limit всегда один и тот же .. .. тот же обработчик ... тот же запрос и никаких новых записей между каждым запросом. Свежий экземпляр (например, 1-й раз + других пользователей)

Каждый запрос разделен только на секунды, но результат отличается.

Я пропустил что-то здесь ... Кто-нибудь еще испытал это? Это какой-то коррумпированный индекс? (Это относительно большая «таблица» с 482 911 элементами) Является ли NDB кэшированием переменной курсора ???

Очень странно.

ответ

0

Запросы не ищут значений в любом кеше. Тем не менее, результаты запроса записываются обратно в кэш-хранилище, если политика кэша говорит об этом (согласно документам). https://developers.google.com/appengine/docs/python/ndb/cache#incontext

Возможно, рассмотрите политику кэширования для рассматриваемого объекта. Однако из вашего фрагмента я не уверен, что ваш запрос сильно согласован. Это, скорее всего, является причиной этой проблемы: https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency

+0

Спасибо за ответ. Кэширование - не фактор, но я думаю, что ваш комментарий о последовательности кажется правильным. Пройдя по нашим журналам, в этот день произошел ряд «медленных» операций с хранилищем данных. То, что я нахожу интригующим, состоит в том, что непоследовательные результаты были ... ну ... непоследовательными. Я предполагаю, что это показывает, что запрос RPC к хранилищу данных обрабатывался рядом серверов, каждый из которых отличался представлениями о том, что такое данные. Забавно, хотя я бы подумал, что этого можно избежать с помощью транзакций (в котором он находится) ... но теперь у нас есть это понимание, мы надеемся, что мы сможем разработать альтернативное решение (например, вашу ссылку) – user2873131

Смежные вопросы