【问题标题】:Existing entity put in Google App Engine放入 Google App Engine 的现有实体
【发布时间】:2012-08-25 14:02:27
【问题描述】:

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

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

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

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

【问题讨论】:

  • 如果可以的话,我会再次投票。
  • 另外,这在 SDK 1.7.1 中非常容易测试,因为 AppStats 提供了运营成本的统计信息(必须启用)。它将准确地告诉您每个操作花费了多少次写入。真正有用的新功能。

标签: google-app-engine


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多