6

在 SimpleDB 中是否存在与身份种子等价的东西?

如果答案是否定的,您如何处理创建诸如客户编号或订单编号之类的内容以防止创建重复编号?

我的经验主要来自 SQL Server,我可以在其中创建带有标识种子的主键,或者使用存储过程中的事务来增加数字。

谢谢你的帮助!

4

2 回答 2

6

您可以使用条件写入创建唯一键。只需使用您要使用的下一个客户编号和您要存储的数据执行 PutAttributes。您不能为实际项目名称添加条件,但可以使用始终存在的属性(如创建日期或用户组)。

设置条件:

   Expected.1.Name=creation_date
   Expected.1.Exists=false

仅当具有该项目名称的项目中没有 creation_date 时,调用才会成功。如果你总是写creation_date,那么你会得到乐观锁定新项目名称的效果。当然,你可以使用任何你想要的属性,只要你总是将它包含在第一个条件 put 中。

在大多数情况下,条件写入的性能与普通写入相同,但是当 SimpleDB 处于高负载或高内部网络延迟时,与普通写入相比,这些调用将花费更长的时间。在 SimpleDB 内部罕见的失败场景中,条件写入将在一段时间内完全失败。

如果您不能容忍这种情况,您将不得不编写某种替代方法来在中断期间获取您的唯一密钥。不同的 SimpleDB 区域只能用于密钥生成,因为 SimpleDB 在中断期间仍将接受正常写入(非条件 PutAttributes)。

于 2010-04-10T15:37:30.003 回答
3

如果您还没有可以工作的独特的东西,则使用项目的 GUID 可能是典型的解决方案。

于 2010-04-10T13:05:03.240 回答