是否可以使用 DynamoDB 执行以下事务?

Is it possible to perfrom the following transaction with DynamoDB?

我正在使用 Java 使用 DynamoDB。我有 2 张桌子,比如 Table1Table2.

Table1 的项目具有如下属性:<attr1, attr2, attr3>

Table2 具有如下属性的项目:<attr3attr4、attr5>

[以上2行中,加粗的属性为分区键,斜体的为范围键]。

我的 API 获取 attr1 作为输入,使用它我将不得不访问 Table1 中的项目,然后使用attr3 从返回的项目中,我将不得不从 Table2 访问一个项目(我有 attr4 可用值)。

我希望这 2 个步骤作为交易完成。

是否可以在 DynamoDB 中执行此类事务?

TransactionLoad,似乎很有希望,但我无法找到一种方法来指定我想要 Table1 中的特定项目,使用 attr1 值,然后使用获得的 attr3 值,从 Table2.

起初我想指出 DynamoDB(或任何非 SQL)不适合那种操作,并且多个 tables:否SQL DynamoDB 设计

关于您的问题,DynamoDB 的事务读取可能性是 TransactGetItems,您可以从多个 table 中读取,但不可能进行读取 1 table,然后读取另一个结果,实际上根据定义,这些是 2 个事务。

为了扩展已接受的答案,您似乎正在尝试使用 NoSQL 数据库实施联接。

SQL 和 NoSQL 解决方案之间的一个决定性区别是数据的规范化。在SQL中,我们经常对数据进行归一化处理,并使用SQL将数据组合成我们应用程序需要的结构。这在规模上可能会成为问题,因为进行复杂的连接(或其他无限制的 SQL 查询)会使大规模预测性能变得困难。

另一方面,

NoSQL 数据库通常 非规范化 数据以满足我们应用程序的特定需求。这种方法消除了跨 table 连接数据的需要,并大规模提高了性能。

您在问题中描述的方法是这两种方法的混合。您正在使用 NoSQL 以规范化的方式存储您的数据,并在您的应用程序代码中模拟连接(因为 DDB 不提供连接)。虽然这种方法在某些情况下可能有意义,但它表明您可能没有为 NoSQL 数据库优化数据建模。

“NoSQL”实现目标的方法是将 Table1 和 Table2 中的数据存储在同一分区(在同一 table 中)。