获取,修改和放置一批具有ndb的实体的最有效方法

asc*_*d00 11 google-app-engine python-2.7 app-engine-ndb google-cloud-datastore

在我的应用程序中,我执行了一些批处理操作.不幸的是,这有时需要永远更新400-500个实体.我所拥有的是所有实体键,我需要获取它们,更新属性并将它们保存到数据存储区并保存它们可能需要40-50秒,这不是我想要的.

我简化了我的模型来解释我做了什么(这很简单):

class Entity(ndb.Model):
    title = ndb.StringProperty()

keys = [key1, key2, key3, key4, ..., key500]

entities = ndb.get_multi(keys)

for e in entities:  
    e.title = 'the new title'

ndb.put_multi(entities)
Run Code Online (Sandbox Code Playgroud)

获取和修改不会花太长时间.我试图get_async进入一个tasklet和其他任何可能的东西,只有在get或forloop需要更长时间才会改变.

但是真正令我困扰的是,放置需要50秒......

什么是在相当长的时间内完成此操作的最有效方法.当然我知道这取决于很多因素,比如实体的复杂性,但是它需要花费的时间实际上超出了我的可接受限度.
我已经尝试过异步操作,tasklets ......

Gui*_*sum 8

我想知道如果做更小批量的50或100个实体会更快.如果将其转换为任务,则可以尝试同时运行这些tasklet.

我还建议用Appstats查看这个,看看是否显示出令人惊讶的东西.

最后,假设这使用HRD,您可能会发现每批实体组的数量有限制.此限制默认非常低.尝试提高它.