gpt4 book ai didi

python - 数据存储中现有实体的复合索引写入

转载 作者:行者123 更新时间:2023-11-28 23:00:20 24 4
gpt4 key购买 nike

我有一个模型:

class MyModel(db.Model):
some_list = db.StringListProperty(indexed=True)
some_value = db.StringProperty(indexed=True)

和一个复合索引:

indexes:
- kind: MyModel
properties:
- name: some_list
- name: some_value

如果我创建一个新实体:

entity = MyModel(some_list=['a', 'b'], some_value='xxx')

然后我将其放入数据存储区:

key = entity.put()

这将导致

  • 2 次写入(在本例中为 2 次写入)
  • 每个索引属性值写入 2 次(在本例中为 2 + 4 次写入)
  • 每个复合索引值写入 1 次(在本例中为 2 次写入)

在这种情况下总共写入了 10 次。到目前为止,我了解 documentation .

但现在我得到了现有的属性,将 'c' 添加到 some_list 并将其放回去:

existing = MyModel.get(key)
existing.some_list.append('c')
existing.put()

那是多少数据存储写入?

文档说:

1 次写入 + 每个修改后的索引属性值 4 次写入 + 每个修改后的复合索引值 2 次写入

这是否意味着不需要重写 some_list 中 'a' 和 'b' 的索引:

1 + 4 + 2 = 7 次写入

或者因为 some_list 改变了,所以重写了 some_list 中 'a' 和 'b' 的索引:

1 + 12 + 6 = 19 次写入

?

最佳答案

(没有复合索引)appstats 显示以下 billed_ops:

对于第一次放:

@2ms datastore_v3.Put real=169ms api=0ms cost=800 billed_ops=[DATASTORE_WRITE:8]

  • 1写入实体表
  • 1 写入种类索引表
  • 2 写入some_value索引表(asc/desc)
  • 4 写入 some_list 索引表(每个附加值 2 个,asc/desc)

对于第二次放置(更新):

@187ms datastore_v3.Put real=50ms api=0ms cost=300 billed_ops=[DATASTORE_WRITE:3]

  • 1写入实体表
  • 2 写入 some_list 索引表(每个附加值 2 个,asc/desc)

文档说 4 写入每个修改后的索引属性值 但由于每个列表属性元素都有自己的索引行(每个值 1 行),添加一个元素等同于创建新的索引属性(不修改一个)。

但是,如果您修改 some_value,这将导致:

@484ms datastore_v3.Put real=46ms api=0ms cost=500 billed_ops=[DATASTORE_WRITE:5]

  • 1写入实体表
  • 4 次写入 some_value 索引表(2 次写入删除现有行 asc/desc,2 次写入添加新行 asc/desc)

关于python - 数据存储中现有实体的复合索引写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12162945/

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