【问题标题】:Can NDB put_multi help to save write operations?NDB put_multi 可以帮助保存写操作吗?
【发布时间】:2014-05-20 16:26:38
【问题描述】:

GAE 文件是这么说的

因为每个 get() 或 put() 操作都会调用一个单独的远程 过程调用 (RPC),在循环内发出许多这样的调用是一种 一次处理实体或键集合的低效方式。

我不明白an inefficient way 到底是什么意思。它可以帮助我节省写操作吗?

【问题讨论】:

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


    【解决方案1】:

    不,它不能减少写操作。但是它可以节省 RPC。

    想想发生了什么。当您调用 put() 时,RPC 发送数据并等待响应,在该调用内部是对数据存储的写入。

    如果单个 RPC 有 30 毫秒的开销,无论它在做什么(为了论证,我正在编造这个数字)。并且写入需要额外的 20 毫秒。然后每个 put() 调用需要 30ms rpc 往返 + 20ms 用于实际写入 = 50ms。

    如果你在一个循环中执行 100 次 put() 调用,那么它将花费 5000 毫秒。

    但是,如果您使用 put_multi() 或 db.put([实体列表]),那么您将只有一个 RPC。这意味着单个 30ms RPC 和 100 * 20ms 写入。它在 2030 毫秒出现。好的,这些数字并不准确,一个包含 100 个实体的 RPC 将比一个只有一个实体花费的时间要长一些。但你明白了。

    【讨论】:

    • 好的,谢谢!而且由于我使用put_async(),所以好处就更少了。
    • 可能,尽管您需要检查 put_async 是否会在后台进行批处理,否则即使看起来不需要很长时间,您仍然会产生多个 rpc(成本)。还有一个 put_multi_async。
    • 我认为值得分析(appstats)看看有多大影响。每个 RPC 确实加起来。
    • RPC 成本在哪里?在这里找不到:developers.google.com/appengine/…。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2012-06-23
    • 2011-08-25
    相关资源
    最近更新 更多