Что означает окончательная согласованность в GAE (HRD)?

Из документов GAE A query may include entities in the result set that should not have been included, or exclude entities that should have been included. Означает ли это, что такой запрос SELECT ORDERS FROM USERX может возвращать результаты от других пользователей, кроме USERX?


person The user with no hat    schedule 24.03.2015    source источник


Ответы (2)


Это означает, что вы можете получить результирующий набор, содержащий устаревшие объекты или объекты, которые были фактически удалены, но никоим образом не неправильные объекты. Другими словами, вы можете увидеть кешированные результаты вместо самых свежих.

Если это проблема, вам придется использовать предков и ограничить результаты одной группой сущностей.

person Lipis    schedule 24.03.2015

Да, вы можете думать об индексах, которые в некоторой степени отстают от сущностей. Если вы выполняете получение по ключу, вы всегда будете получать строгую согласованность, т. е. вы всегда будете получать «правильные» (последние) объекты.

Всякий раз, когда вы выполняете запрос (не к предку), Datastore сканирует один или несколько индексов. Эти индексы могут (пока) не отражать последние значения объекта. «В конце концов» они будут согласованы, но нет никаких гарантий относительно того, когда (сущность должна быть реплицирована в разных местах и ​​обновлены соответствующие индексы).

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

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

person tx802    schedule 24.03.2015