Python 数据存储中现有实体的复合索引写入
我有一个模型:Python 数据存储中现有实体的复合索引写入,python,google-app-engine,google-cloud-datastore,Python,Google App Engine,Google Cloud Datastore,我有一个模型: 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
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次写入)
existing = MyModel.get(key)
existing.some_list.append('c')
existing.put()
这是多少数据存储写入
文件说:
每个修改的索引属性值1次写入+4次写入+2次修改的复合索引值写入
这是否意味着不需要重写某些_列表中“a”和“b”的索引:
1+4+2=7次写入
或者某个列表中“a”和“b”的索引是否因为某个列表发生了更改而被重写:
1+12+6=19次写入
?(不含综合指数)appstats显示以下账单运营
:
第一票:
@2ms数据存储\u v3.Put real=169ms api=0ms成本=800计费\u操作=[数据存储\u写入:8]
- 1写入实体表
- 1填写种类索引表
- 2写入索引表(asc/desc)
- 4写入
索引表(每个附加值2个,asc/desc)some_list
- 1写入实体表
- 在索引表中写入2条代码(每个附加值2条,asc/desc)
4次写入每个修改的索引属性值
,但由于每个列表属性元素都有自己的索引行(每个值1行),添加一个元素相当于创建新的索引属性(而不是修改一个)
但是,如果修改某些值,这将导致:
@484ms数据存储\u v3.Put real=46ms api=0ms成本=500计费\u操作=[数据存储\u写入:5]
- 1写入实体表
- 4次写入
索引表(2次写入用于删除现有行asc/desc,2次写入用于添加新行asc/desc)some_value
- (不含综合指数)appstats显示以下
账单运营
:
第一票:
@2ms数据存储\u v3.Put real=169ms api=0ms成本=800计费\u操作=[数据存储\u写入:8]
- 1写入实体表
- 1填写种类索引表
- 2写入索引表(asc/desc)
- 4写入
索引表(每个附加值2个,asc/desc)some_list
- 1写入实体表
- 在索引表中写入2条代码(每个附加值2条,asc/desc)
4次写入每个修改的索引属性值
,但由于每个列表属性元素都有自己的索引行(每个值1行),添加一个元素相当于创建新的索引属性(而不是修改一个)
但是,如果修改某些值,这将导致:
@484ms数据存储\u v3.Put real=46ms api=0ms成本=500计费\u操作=[数据存储\u写入:5]
- 1写入实体表
- 4次写入
索引表(2次写入用于删除现有行asc/desc,2次写入用于添加新行asc/desc)some_value