Amazon SimpleDB – atomicity & queues - 以原子方式制作 2 个放置?



我们有几个智能手机应用程序依赖于AmazonSimpleDB和s3。

架构通常非常简单,数据不敏感,每个应用程序没有太多用户,应用程序直接查询亚马逊(而不是在中间有我们自己的服务器)。

到目前为止一切都很好,完全满足了我们合理的需求。

但现在,我遇到了一个问题,我们的一个应用程序必须触发一个由2个SimpleDB put组成的操作。

问题是,这些"2次看跌"必须以原子的方式进行,作为要么全有要么全无的块。在2次输入之间,数据库没有完整性,任何人都不能在这种糟糕的状态下读取它。

因此,我所研究的是实现这一点的最简单方法,我想它将涉及某种队列,在这些队列中,操作被逐一处理,包括读取。

但老实说,这不是我的领域,我希望它不涉及在专用服务器上编写一些非常复杂的Web应用程序。

对于我显然还没有的那种知识,任何变通方法或建议都将不胜感激。

谢谢!

原子性和事务是关系数据库中的一些伟大功能,当使用像SimpledDB这样的NoSQL解决方案时,您会放弃这些功能。你可能想考虑一个便宜的托管MySQL数据库,比如亚马逊RDS或许多其他托管数据库供应商提供的数据库。然而,如果你想继续使用SimpleDB,你不需要排队,但可以滚动自己的交易,并按照Willy的建议进行:

  1. 在保存的项目中添加一个类似"提交"的属性
  2. 编写一个工具(或找到一个产品),可以更新您以前保存的所有项目,其值为committed=1
  3. 更新代码,使两步操作的第一步保存属性committed=0的项,第二步通过设置committed=1"提交"项
  4. 将所有查询更改为仅提取已提交的项,类似于"从您的_domain中选择*,其中{criteria1}和{criteria2}以及{more criteria}和committed='1'"

最新更新