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