【问题标题】:AppEngine NDB Query return different ResultsAppEngine NDB 查询返回不同的结果
【发布时间】:2023-04-01 18:03:01
【问题描述】:

我的实时应用中有一个查询“奇怪”...

使用 Python 2.7 运行 1.8.4 SDK...1.8.5 实时实例

Measurement 是一个 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)

现在奇怪的是,如果我运行它,有时我会得到 4 个项目,有时只得到 1 个。(正确答案是 4)....

查询的转储完全相同...游标设置为无...限制始终相同...相同的处理程序...相同的查询并且每个查询之间没有新记录。新鲜实例(例如第一次 + 没有其他用户)

每个查询仅以秒为间隔,但结果却不同。

我在这里遗漏了什么...有其他人经历过吗?这是某种损坏的索引吗? (这是一个相对较大的“表”,有 482,911 个项目)NDB 是否缓存了游标变量???

非常非常奇怪。

【问题讨论】:

    标签: python google-app-engine app-engine-ndb


    【解决方案1】:

    查询不会在任何缓存中查找值。但是,如果缓存策略如此说明(根据文档),查询结果将被写回上下文缓存。 https://developers.google.com/appengine/docs/python/ndb/cache#incontext

    也许可以查看相关实体的缓存策略。但是,从您的 sn-p 来看,我不确定您的查询是否高度一致。这更有可能是导致此问题的原因:https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency

    【讨论】:

    • 感谢您的回复。缓存不是一个因素,但我认为您对一致性的评论似乎是正确的。查看我们的日志,那天有许多“缓慢”的数据存储活动。我觉得有趣的是不一致的结果是……嗯……不一致。我想这表明对数据存储的 RPC 请求是由许多服务器处理的,每个服务器对数据是什么都有不同的想法。有趣的是,虽然我认为使用交易(它在其中)是可以避免的......但现在我们有了这个见解,希望我们可以制定一个替代解决方案(例如你的链接)
    猜你喜欢
    • 1970-01-01
    • 2014-06-05
    • 2011-11-08
    • 2017-12-05
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    相关资源
    最近更新 更多