2

假设我有一个包含大约 300 万个项目的 AWS SimpleDB 域,每个项目都有一个属性为“foo”,其值为任意整数(当然,它实际上作为字符串存储在 SimpleDB 中,但让我们忽略转换为和从现在开始)。我想每 60 秒增加每个项目的 foo 值,直到达到最大值(每个项目的最大值不同,项目的最大值存储为项目中的另一个属性值),然后将 foo 重置为零:读取、增加、评估、存储。

考虑到大量项目和 60 秒的硬时间限制,这种方法在 SimpleDB 中是否可行?任何人都有办法使这项工作?

4

2 回答 2

1

你可以做到,但这是不可行的。对于单个域,您每秒只能获得 100-300 个 PUT。您每秒可以读取超过 1000 个项目,因此写入将成为瓶颈。

保守一点,假设每个域每秒进行 100 次存储操作。您需要 500 个域才能打开足够的吞吐量以每分钟存储全部 300 万个。默认情况下您只能获得 100 个,因此您必须要求更多。

也会很贵。具有少量属性的写入约为每百万美元 3,读取约为每百万美元 1.30 美元。这大约是 13 美元/分钟。

我唯一能真正建议的是,如果有一种方法可以将 300 万个项目组合成更少的项目。如果有一种方法可以将 50 个“项目”放入每个真实项目中,那么您可以使用 10 个域以大约 15.50 美元/小时的价格进行操作。但我仍然认为这不可行,因为您可以以 6.80 美元/小时的价格获得一个由 10 个超大型高 CPU EC2 服务器实例组成的集群。

于 2010-04-01T14:02:04.420 回答
0

为什么不在读取时从受信任的时钟生成值?我要编一些名字:

  • Touch_time - 项目初始化为零时的纪元值(自 1970 年以来的秒数)。
  • Max_age - 时间环绕的分钟数。
  • Current_time - 现在的纪元值。

因此,在任何时候,您都可以通过

(current_time - touch_time) % (max_age * 60)

假设 max_age 变化相对不频繁,并且每个人都相信 touch_time 和 current_time 在一分钟内,这就是 NTP 的用途。

于 2013-01-15T17:23:45.317 回答