gpt4 book ai didi

python - 将实体在 Python Cloud Datastore 上持续变慢

转载 作者:太空狗 更新时间:2023-10-30 01:11:40 26 4
gpt4 key购买 nike

我在 Python 3 灵活应用引擎环境中通过 Python 库使用 Google Cloud Datastore。我的 flask 应用程序创建一个对象,然后将其添加到数据存储区:

ds = datastore.Client()
ds.put(entity)

在我的测试中,每次调用 put 需要 0.5-1.5 秒才能完成。如果我像 here 一样一个接一个地立即调用两个电话,这不会改变。 .

我想知道我的对象的复杂性是否是问题所在。它是多层的,例如:

object = {
a: 1,
...,
b: [
{
d: 2,
...,
e: {
h: 3
}
}
],
c: [
{
f: 4,
...,
g: {
i: 5
}
}
]
}

这是我通过嵌套 datastore.Entity 创建的,每个都用类似的东西初始化:

entity = datastore.Entity(key=ds.key(KIND))
entity.update(object_dictionary)

两个列表都是 3-4 项长。该对象的 JSON 等价物约为 2-3kb。

这不是推荐的做法吗?我应该怎么做?

更多信息:

我目前没有将 Entityput 包装在交易中。 put只是 put_multi 的薄包装。 put_multi似乎创建一个 batch,发送 Entity,然后提交 batch

我没有指定对象的“名称/ID”(来自数据存储在线控制台的标题)。我允许图书馆为我决定:

datastore.key(KIND)

其中 KIND 只是一个指定我的收藏名称的字符串。替代方案是:

datastore.key(KIND, <some ID>)

我用它来更新对象,而不是在这里我最初创建对象的地方。库生成的 key 随时间增加,但不是单调增加的(例如:id=4669294231158784,id=4686973524508672)。

我不是 100% 确定我正在做的事情的术语(“实体是否在同一个实体组中,或者如果你使用索引属性”),但人们似乎将这个过程称为“嵌入式实体” “(即 here )。在数据存储在线控制台中,在实体部分下,我的每个子对象只有一个“种类”,而不是多个种类。这是否回答了您的问题,或者我能以某种方式找到它吗?

我在集合上只有一个索引,在一个单独的 ID 字段上,它是对不同数据库中另一个对象的引用,用于跨数据库查找。

最佳答案

您可以使用 Batch operations 提高多次连续写入(以及读取)的性能:

Batch operations

Cloud Datastore supports batch versions of the operations which allow it to operate on multiple objects in a single Cloud Datastore call.

Such batch calls are faster than making separate calls for each individual entity because they incur the overhead for only one service call. If multiple entity groups are involved, the work for all the groups is performed in parallel on the server side.

client.put_multi([task1, task2])

关于python - 将实体在 Python Cloud Datastore 上持续变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48750193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com