2012-08-25 97 views
9

出于某种原因,我一直认为,编写现有实体与编写新实体一样昂贵(如果不是更多),所以我的很多代码都集中在将实体分解为更小的实体的方式,以便在修改属性时降低写入成本。然而,现在在documentation看,它指出现有实体放有以下成本:将现有实体放入Google App Engine

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

在我改变我的代码的整个结构之前,我想确定我理解的细节。什么确切地将索引限定为“修改”?假设我有4个索引字符串属性并且没有组合索引。把这个作为一个新的实体将花费10写(2 + 2(indexed properties))。假设我现在修改其中一个字符串属性并将其放回。这将花费5只写(1 + 4 per modified index)?我错过了什么?有什么我应该考虑的?

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

+0

如果可以的话,我会再试一次。 – dragonx

+1

此外,现在AppStats提供了有关操作成本(必须启用)的统计信息,因此在SDK 1.7.1中测试起来非常简单。它会告诉你每个操作执行的次数。真正有用的新功能。 –

回答

3

所有的推测都是正确的。如果您知道写入的内容,它会有所帮助:1写入的是实体本身;在创建时每个索引属性的2次写入用于每个属性的升序和降序单一属性索引,并且每次更新时每个索引属性的写入次数是删除旧值并将新值插入到升序和降序索引中。

1

我刚刚跑了一个实验,我更新了一个模型,它有3个索引属性(其中一个是列表),还有4个未指定索引的属性。

我用一个mapreduce运行来更新一个未索引的属性和Put()实体。

如果我做了我的数学计算,我已经证实,每个实体只需要1次写操作,即使有3个索引属性(未更新)。 (我的数学可能有点不便,因为我使用了mapreduce,mapreduce本身发布了一堆数据存储写入,我做了一个单独的实验来估计mapreduce写入的数量,所以我已经说明了这一点)。

相关问题