在我的应用程序中,我执行了一些批处理操作。 不幸的是,这有时需要很长时间才能更新 400-500 个实体。 我拥有的是所有实体 key ,我需要获取它们,更新属性并将它们保存到数据存储区,保存它们最多可能需要 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)
获取和修改不会花太长时间。我试图让 get_async 进入一个 tasklet 以及其他任何可能的方法,只有在 get 或 forloop 花费更长的时间时才会改变。
但真正让我困扰的是,看跌期权最多需要 50 秒...
在适当的时间内执行此操作的最有效方法是什么。我当然知道这取决于很多因素,例如实体的复杂性,但放置所需的时间确实超过了我可以接受的限度。
我已经尝试过异步操作,tasklets...
最佳答案
我想知道是否做小批量的,例如50 或 100 个实体会更快。如果你把它变成一个任务,你可以尝试同时运行这些 tasklet。
我还建议使用 Appstats 查看此内容看看这是否显示出令人惊讶的东西。
最后假设这使用 HRD,您可能会发现每批处理的实体组数量有限制。此限制默认值非常低。尝试提高它。
关于google-app-engine - 使用 ndb 获取、修改和放置一批实体的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10181018/