1

Из того, что я читал в Документах Google и других вопросах SO, запросы key_only должны возвращать сильно согласованные результаты (например, и here).Почему запрос key_only не возвращает сильно согласованные результаты?

Мой код выглядит примерно так:

class ClientsPage(SomeHandler): 
    def get(self): 
     query = Client.query() 
     clients = query.fetch(keys_only=True) 
     self.write(len(clients)) 

Хотя я и извлечение результатов с keys_only = True параметром я получаю несвежие результаты сразу же после создания нового объекта клиента (который является корневой объект). Если перед вставкой было 2 клиентских объекта, он продолжает показывать 2 после вставки и перенаправления. Мне нужно вручную обновить страницу, чтобы увидеть изменение номера до 3.

Я понимаю, что могу использовать запросы предков, но сначала я проверяю некоторые вещи, и я был удивлен, увидев, что запрос key_only возвращает устаревшие результаты. Может кто-нибудь объяснить мне, что происходит?

EDIT 1: Это произошло на сервере разработки, я не тестировал его на производстве.

ответ

5

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

Напротив, получение объекта по ключу не нужно рассматривать индексы, поэтому оно всегда сильно согласовано.

+0

Спасибо, теперь я вижу свое замешательство. Теперь я передаю вновь сформированный ключ в качестве аргумента для моей следующей функции, так что он добавляется, если запрос не находит его. –