首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用DynamoDB完成以下事务?

问是否可以使用DynamoDB完成以下事务?
EN

Stack Overflow用户
提问于 2021-05-31 04:48:32
回答 2查看 46关注 0票数 0

我正在使用Java使用DynamoDB。我有两张桌子,Table1和Table2说。

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

Table2具有如下属性的项:<attr3、attr4、attr5>

在上面的2行中,粗体的属性是分区键,斜体的属性是范围键。

我的API获得attr1作为输入,使用它我必须从Table1访问一个项,然后从返回的项中使用attr3,我必须从Table2访问一个项(我有attr3 4E 221值)。

我希望这两个步骤作为一个事务来完成。

在DynamoDB中可以执行这种类型的事务吗?

TransactionLoad,看起来很有希望,但是我找不到一种方法来指定我想要从Table1中获得特定的项,使用attr1值,然后使用获得的attr3值,从Table2获取项目。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-31 08:52:12

首先,我想指出,DynamoDB (或任何非SQL)不适合于那种操作和多个表:基于NoSQL的DynamoDB设计

关于您的问题,DynamoDB的事务性读取能力是TransactGetItems,在这里您可以从多个表读取,但是不可能创建一个读取一个表的事务,如果结果读取另一个表,实际上,根据定义,这是两个事务。

票数 1
EN

Stack Overflow用户

发布于 2021-06-01 19:43:05

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

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

另一方面,NoSQL数据库通常对数据进行去denormalize,以满足我们应用程序的特定需求。这种方法消除了跨表连接数据的需要,并提高了性能。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67768048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档