我正在将dynamodb与python API配合使用,并对数据进行非规范化以保持快速读取。我的想法是,我担心在更新数据时保持一致性,比如说我有一个用户表,每个用户都有一个键和一个名称,而一个购买表每个都有一个键和一个包含买方键(用户)的数据,买家的名字。
我想使用原子操作来更新用户名并更新所有购买的商品,就像在here中解释的firebase(多路径更新)中提供的
我该怎么做?
谢谢
答案 0 :(得分:1)
这是dynamodb transaction的不错的文档。
以下是该博客文章的重点内容。
Dynamodb支持across multiple table
处的事务处理能力can also have pre-condition on every insert
(即,只有在prev_snapshot = 1223232时才插入订单表,这将确保您仅修改最近读取的数据。)
有两种类型的受支持TransactGetItems和最终/严格一致的GetItem。在TransactGetItems, if a transaction is in progress the request is rejected
中。而在其他两种情况下,最后提交的数据将根据您的一致性要求返回。
如果其他一些线程正在向没有事务的表中写入事务,并且在事务完成之前写入成功,并且事务将引发异常,则事务不会被锁定。
在单个区域表上启用事务不需要任何额外的步骤/权限。
使用事务功能时,每次读取和写入的成本都会翻倍。
以下是不支持的功能
Transactional capabilities in global table
。但这可以通过避免请求粘性来避免,并且这不是IMO的大问题。