现有实体放入Google App Engine

时间:2012-08-25 14:02:27

标签: google-app-engine

出于某种原因,我一直认为编写现有实体与编写新实体一样昂贵,如果不是更多,所以我的很多代码都专注于将实体分解为更小实体的方法因此,当我修改属性时,它会降低写入成本。但是,现在查看documentation,它表明现有的实体投放具有以下成本:

  

每次修改的索引属性值写入+ 4次写入+每次写入2次   修改后的综合指数值

在我改变代码的整个结构之前,我想确定我理解细节。究竟什么使索引符合“修改”标准?假设我有4个索引字符串属性,没有复合索引。要将此作为新实体,将花费10次写入(2 + 2(indexed properties))。假设我现在修改其中一个字符串属性并将其放回原处。这笔费用只会写入(1 + 4 per modified index)吗?我错过了什么吗?有什么我应该考虑的事情吗?

如果我有4个索引属性和1个非索引属性,并且我只修改非索引属性 - 这只会花费我1次写入重新放置怎么办?

2 个答案:

答案 0 :(得分:3)

你所有的假设都是正确的。如果您知道写入的内容,它会有所帮助:1写入是针对实体本身的; create上每个索引属性的2次写入是针对每个属性的升序和降序单个属性索引,并且更新时每个索引属性的4次写入是删除旧值并将新值插入到那些升序和降序索引中。

答案 1 :(得分:1)

我刚刚进行了一项实验,我更新了一个具有3个索引属性的模型(其中一个是列表)和4个未编入索引的属性。

我使用了mapreduce运行来更新其中一个未编入索引的属性,并使用Put()更新实体。

如果我的数学运算正确,我已经确认每个实体只需要1次写操作,即使有3个索引属性(未更新)。

(因为我使用mapreduce,我的数学可能有点不确定,而mapreduce本身会发出一堆数据存储区写入。我做了一个单独的实验来估算mapreduce写入的数量,所以我已经考虑了它。) / p>