我有一个模特:
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()
这将导致
在这种情况下总共写入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中'a'和'b'的索引被重写,因为some_list发生了变化:
1 + 12 + 6 = 19写
答案 0 :(得分:4)
(没有复合索引)appstats显示以下billed_ops
:
第一次投入:
@ 2ms datastore_v3.Put real = 169ms api = 0ms cost = 800 billed_ops = [DATASTORE_WRITE:8]
some_value
索引表(asc / desc)some_list
索引表(每个附加值为2,asc / desc)对于第二次放置(更新):
@ 187ms datastore_v3.Put real = 50ms api = 0ms cost = 300 billed_ops = [DATASTORE_WRITE:3]
some_list
索引表(每个附加值为2,asc / desc)文档说4 writes per modified indexed property value
但由于每个list属性元素都有自己的索引行(每个值1行),因此添加元素等同于创建新的索引属性(不修改一个)。
但是,如果您修改some_value
,则会产生:
@ 484ms datastore_v3.Put real = 46ms api = 0ms cost = 500 billed_ops = [DATASTORE_WRITE:5]
some_value
索引表(2写入删除现有行asc / desc,2写入添加新行asc / desc)