google-app-engine - 使用 ndb 获取、修改和放置一批实体的最有效方法

标签 google-app-engine google-cloud-datastore python-2.7 app-engine-ndb

在我的应用程序中,我执行了一些批处理操作。 不幸的是,这有时需要很长时间才能更新 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/

相关文章:

google-bigquery - 使用 Google Data Studio 分析 Google Cloud Datastore 中的数据

python - 运行 PyInstaller 生成的二进制文件时出现模块导入错误

java - 将过滤器引入 App Engine 应用程序的正确方法是什么?

php - 带有 php 的谷歌应用引擎不支持 mysqli

google-app-engine - golang appengine api测试错误 "appengine: NewContext passed an unknown http.Request"

java - GAE eclipse : Cross-Modules Referencing

python - 将大量 XML 数据导入 Google App Engine

python - 如何使用 python 在文件中查找一组最常出现的词对?

c++ - 使用(python,perl)(linux)在excel中创建图表

android - 使用谷歌时出现 EOFException 端点