9

出于某种原因,我的印象是编写一个现有实体与编写一个新实体一样昂贵,甚至更多,所以我的很多代码都集中在将实体分解成更小的实体的方法上,这样当我修改一个属性,它会产生更少的写入成本。但是,现在查看文档,它指出现有实体 put 具有以下成本:

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

在更改代码的整个结构之前,我想确保我了解细节。究竟是什么使索引符合“修改”的条件?假设我有 4 个索引字符串属性并且没有复合索引。将其作为一个新实体将花费 10 次写入(2 + 2(indexed properties))。假设我现在修改这些字符串属性之一并将其放回原处。那只需要5次写入(1 + 4 per modified index)吗?我错过了什么吗?有什么我应该考虑的吗?

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

4

2 回答 2

3

你所有的假设都是正确的。如果您知道写入的用途会有所帮助: 1 写入用于实体本身;创建时每个索引属性的 2 次写入用于每个属性的升序和降序单个属性索引,更新时每个索引属性的 4 次写入是删除旧值并将新值插入到这些升序和降序索引中。

于 2012-08-26T22:36:08.310 回答
1

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

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

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

(自从我使用 mapreduce 以来,我的数学可能有点不确定,而且 mapreduce 本身会发出一堆数据存储写入。我做了一个单独的实验来估计 mapreduce 写入的数量,所以我已经考虑过了)。

于 2012-08-25T20:37:23.127 回答