已有实体放入Google App Engine

9
由于某种原因,我一直认为写入现有实体的成本与编写新实体的成本相同,甚至更高,因此我的很多代码都集中在将实体分解为更小的实体的方式上,以便在修改属性时减少写入成本。但是,现在查看文档,它说明现有实体放置的成本如下:
1次写入 + 每个修改索引属性值的4次写入 + 每个修改复合索引值的2次写入
在我改变整个代码结构之前,我想确保我了解细节。什么情况下,索引才能被视为“修改”?比方说,我有4个索引字符串属性和没有复合索引。将其作为新实体放置将花费10次写入(2+ 2(已索引的属性))。假设现在我修改其中一个字符串属性并再次放置,那只需要5次写入吗(1 + 每个修改索引属性的4次写入)?我是否遗漏了一些内容?有没有其他需要考虑的事项?
如果我有4个索引属性和1个非索引属性,并且我只修改非索引属性-这只需要1次写入来重新放置吗?

1
此外,在SDK 1.7.1中测试这个非常容易,因为AppStats可以提供操作成本的统计数据(必须启用)。它会告诉你每个操作所需的写入次数。这是一个非常有用的新功能。 - Bryce Cutt
2个回答

3

您的所有假设都是正确的。如果您知道写入的目的,那么就更好了:在创建时,每个索引属性的2个写入用于每个属性的升序和降序单属性索引;在更新时,每个索引属性的4个写入用于从这些升序和降序索引中删除旧值并插入新值。


1

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

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

如果我算对了的话,我已经验证每个实体只需要1个写操作,即使有3个索引属性(未更新)。

(我的计算可能有点不准确,因为我使用了mapreduce,而mapreduce本身会发出一堆数据存储写入。我进行了单独的实验来估计mapreduce写入的数量,所以我已经考虑到了这一点)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接