首页 > 解决方案 > DynamoDB 是否具有锁定行以供读取的机制?

问题描述

Amazon DynamoDB 是否具有锁定行以供读取的机制?类似于https://www.2ndquadrant.com/en/blog/what-is-select-skip-locked-for-in-postgresql-9-5/上为 PostgresQL 描述的内容

我找不到任何文件,因此想确认。

编辑:我想锁定一行,以便“读取”在锁定时不会获取该行。释放锁后可再次读取。

EDIT2:目的是模拟分布式处理队列。不同的客户端需要从表中拉出一个项目进行处理。请参阅上面的链接以了解如何在 PostgresQL 中实现这一点。

标签: amazon-web-servicesamazon-dynamodb

解决方案


DynamoDB 不支持此功能。

RDMBS 将行锁与事务相关联,并将事务与与数据库的单个客户端连接相关联(并在持有它们的连接消失时自动释放这些锁)但 DynamoDB 是无连接的——您的代码和数据库之间的一切都发生在一系列不相关的 HTTPS 请求。(当然,DynamoDB 也不是 RDBMS)。

因此,DynamoDB 没有类似的概念SELECT ... FOR UPDATE(锁定找到的行并阻止其他事务看到它们,无论是通过隐式读取阻塞还是显式跳行),并且没有任何随之而来的功能。

最接近的事情 - 诚然不是特别接近 - 将使用一致的读取和条件写入(仅当属性已经与预期状态匹配时才允许更新属性)来检查、设置和清除用户定义的锁定属性标记每条记录的状态,并可能留下记录如何处于该状态的痕迹(填充,例如,“记录在时间戳 w 被来自主机 z 上的 pid y 的线程 x 锁定”之类的东西在弄清楚时很有帮助如果记录卡在锁定状态会发生什么)。


推荐阅读