【问题标题】:Google App Engine - NDB - Set property value on multiple recordsGoogle App Engine - NDB - 在多条记录上设置属性值
【发布时间】:2013-11-15 02:57:11
【问题描述】:

我在 Google App Engine 上使用 NDB 和 Python。更新具有相同值的多个实体上的属性的正确方法是什么? NDB 相当于:

UPDATE notifications SET read = true WHERE user_id = 123

用例是我有这些扇出通知。并且特定用户希望将所有通知设置为已读(可能为 100 条)。我知道我可以使用 get_async 和 put_async 来获取每个未读通知并将其设置为已读,但我担心通过获取潜在的 100 次序列化/反序列化所产生的延迟。

非常欢迎任何建议。

【问题讨论】:

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


    【解决方案1】:

    您可以使用 Query 的 map() 方法为每个实体调用一个函数。为获得最佳性能,请不要忘记_async

    但是 GAE 最有用的服务之一是任务队列,尤其是在这种情况下。如果将Query Cursorsdeferred library 结合使用,则可以轻松处理任意数量的实体。

    【讨论】:

    • 任务队列是一个很好的建议,我曾预料到如果我确实需要获取所有实体以更新它们的属性,我可能需要使用它们。我想知道地图。我并没有真正转换(或映射)任何数据,即我不关心结果。我只需要放数据。仍然认为映射符合要求?
    • map() 可以很好地处理少量结果,否则您想使用延迟库示例。不要忘记将你的放置在一起。 (在每个实体上调用 ndb.put_multi() vs model.put()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    相关资源
    最近更新 更多