【发布时间】:2014-05-20 16:26:38
【问题描述】:
GAE 文件是这么说的
因为每个 get() 或 put() 操作都会调用一个单独的远程 过程调用 (RPC),在循环内发出许多这样的调用是一种 一次处理实体或键集合的低效方式。
我不明白an inefficient way 到底是什么意思。它可以帮助我节省写操作吗?
【问题讨论】:
标签: google-app-engine app-engine-ndb quota
GAE 文件是这么说的
因为每个 get() 或 put() 操作都会调用一个单独的远程 过程调用 (RPC),在循环内发出许多这样的调用是一种 一次处理实体或键集合的低效方式。
我不明白an inefficient way 到底是什么意思。它可以帮助我节省写操作吗?
【问题讨论】:
标签: google-app-engine app-engine-ndb quota
不,它不能减少写操作。但是它可以节省 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(),所以好处就更少了。