如何使用DynamoDB实现一对多关系

时间:2020-09-25 13:02:49

标签: java spring-boot nosql amazon-dynamodb one-to-many

大家!我有两个要通过DynamoDb加入的表,但是由于后者不是关系数据库,所以我不知道如何映射两个表之间的链接。 特别是,我有一个价目表和一个包含第一个明细的明细表。如何在Spring Boot中使用dynamoDB在Java中实现一对多关系?

2 个答案:

答案 0 :(得分:0)

DynamoDB本质上是键值存储。您每个人都只能基于密钥执行查找。该密钥可能是人为的,不仅是用户ID,而且可能是“ user_id#product#order”,但仍将是基于密钥的查找。如果要使用DynamoDB,则必须以某种方式存储数据,所有需要的查询都可以归结为基本的基于键的访问(加上某种排序)。
您必须执行与将数据标准化并将关系拆分为多个表完全相反的操作:您必须对所有数据进行非标准化,以使用多个复杂的人工键将数据和所有关系仅一次存储在一张表中。参见例如https://www.youtube.com/watch?v=HaEPXoXVf2k关于如何使用LSI,GSI,如何对数据建模,如何选择人工密钥等。

这意味着您将没有将ItemOrderOrderItem表连接在一起,但是只有一个Everything表,其中可能包含以下字段:用户ID,用户名,订单号,商品ID,商品价格,商品数量,商品名称,订单日期,送货地址等。
并且,如果您有一个订单中的三个项目,则此表中将有三个条目。这意味着用户名将经常出现在表中,这意味着项目名称将经常出现在表中,并且更改它们将很困难,但是如果要使用dynamodb,那就是这种情况。

这就是通过将一对多关系打包到一个表中并添加适当的索引来建模一对多关系的方式。

如果您不了解数据的当前或将来访问模式或如何正确构造数据,那么dynamodb对您来说是错误的工具。

答案 1 :(得分:0)

您要提出的问题从本质上讲就是使用DynamoDB和NoSQL数据建模。它不像将您的关系数据库知识应用于DynamoDB那样简单。花一点时间熟悉DynamoDB基础知识,然后再深入解决这个问题。

在DynamoDB中观看this video about modeling one-to-many relationships。我建议您从头开始观看整个视频,因为它是当前可用主题的最佳介绍之一。

相关问题