dynamodb 更新非规范化数据并保持一致性
dynamodb update denormalized data and keep consistency
我将 dynamodb 与 python API 一起使用并对我的数据进行非规范化以保持快速读取。我的想法是我担心在更新数据时保持一致性说我有 table 个用户,每个用户都有一个密钥和一个名称,table 个购买每个都有一个密钥和一个包含买家密钥(用户)和买家姓名的数据。
我想更新用户的姓名并使用原子操作更新他的所有购买,就像在 firebase 中可用(多路径更新)解释的那样here
我该怎么做?
谢谢
这是 dynamodb transaction 的一个很好的文档。
以下是博客的一些亮点 post。
Dynamodb 支持事务功能 across multiple table
,您 can also have pre-condition on every insert
(即仅当 prev_snapshot=1223232 时才插入订单 table,这将确保您只是在修改最后读取的数据。)
有 2 种类型的获取支持 TransactGetItems 和 Eventual/Strongly 一致的 GetItem。在TransactGetItems, if a transaction is in progress the request is rejected
。而在其他 2 种情况下,根据您的一致性要求返回最后提交的数据。
如果其他线程正在写入一个没有事务的table,事务不是锁,如果在事务完成之前写入成功,事务将抛出异常。
无需额外 steps/permissions 即可在单个区域 table 上启用交易。
使用事务功能时,每次读写的成本都会翻倍。
以下是不支持的功能
Transactional capabilities in global table
。但这可以通过请求粘性来避免,在我看来应该不是一个大问题。
我将 dynamodb 与 python API 一起使用并对我的数据进行非规范化以保持快速读取。我的想法是我担心在更新数据时保持一致性说我有 table 个用户,每个用户都有一个密钥和一个名称,table 个购买每个都有一个密钥和一个包含买家密钥(用户)和买家姓名的数据。
我想更新用户的姓名并使用原子操作更新他的所有购买,就像在 firebase 中可用(多路径更新)解释的那样here
我该怎么做?
谢谢
这是 dynamodb transaction 的一个很好的文档。
以下是博客的一些亮点 post。
Dynamodb 支持事务功能
across multiple table
,您can also have pre-condition on every insert
(即仅当 prev_snapshot=1223232 时才插入订单 table,这将确保您只是在修改最后读取的数据。)有 2 种类型的获取支持 TransactGetItems 和 Eventual/Strongly 一致的 GetItem。在
TransactGetItems, if a transaction is in progress the request is rejected
。而在其他 2 种情况下,根据您的一致性要求返回最后提交的数据。如果其他线程正在写入一个没有事务的table,事务不是锁,如果在事务完成之前写入成功,事务将抛出异常。
无需额外 steps/permissions 即可在单个区域 table 上启用交易。
使用事务功能时,每次读写的成本都会翻倍。
以下是不支持的功能
Transactional capabilities in global table
。但这可以通过请求粘性来避免,在我看来应该不是一个大问题。