0

我在App Engine生产环境中遇到了一个奇怪的情况。ndb查询返回旧属性值

有一个实体已正确更新。我能够在数据存储查看器中看到更新的值。还有一个请求,它在查询中检索到相同的实体。实体出现在结果中,但它具有旧的财产价值。我能够通过清除内存缓存来解决问题。 查询直接在数据存储上执行,而不是从memcache返回。光标被初始化为无

announcements, cursor, more = query.fetch_page(
    msg.valid_data.get('limit') or 40, start_cursor=cursor) 

是否有任何情况下直接查询可以返回来自memcache的结果? 没有什么关于它的ndb caching documentation

它可能与游标有关吗?

回答

4

不,这与memcache或游标无关,但具有最终的一致性。非祖先查询显式不保证返回更新的数据。

请参阅关于structuring data for strong consistency的文档。

+0

我认为最终的一致性只会影响哪些实体出现在结果中,而不是它们的内容 – 2014-09-24 10:38:53

+0

不,完全没有。如果您对现有实体进行更改,然后执行查询,则很可能会取回该实体的旧版本。 – 2014-09-24 10:59:01

+0

谢谢。我现在知道了 – 2014-09-24 11:07:04