NDB put_multi可以帮助保存写操作吗?

时间:2014-05-20 16:26:38

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

GAE文件说

  

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

我不明白an inefficient way究竟是什么意思。它可以帮我保存写操作吗?

1 个答案:

答案 0 :(得分:5)

不,它无法减少写入操作。但是它可以保存RPC。

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

如果单个RPC的开销为30ms,无论它在做什么(我为了参数而将这个数字增加)。并且写入需要额外的20ms。然后每个put()调用需要30ms rpc往返+ 20ms实际写入= 50ms。

如果在循环中执行100次put()调用,则需要5000ms。

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