如何将关系表迁移到dynamoDB表

时间:2018-06-01 15:48:32

标签: postgresql amazon-web-services nosql amazon-dynamodb

我是DynamoDB的新手,在我当前的项目中,我正在尝试将大多数关系表迁移到Dynamo DB。我正面临一个棘手的场景,我不知道如何解决

在Posgresql中,有2个表:

Student
id |  name  | age | address | phone 
---+--------+-----+---------+--------
1  | Alex   | 18  | aaaaaa  | 88888
2  | Tome   | 19  | bbbbbb  | 99999
3  | Mary   | 18  | ccccc   | 00000
4  | Peter  | 20  | dddddd  | 00000

Registration
id | class  | student | year 
---+--------+---------+---------
1  | A1     | 1       | 2018
2  | A1     | 3       | 2018
3  | A1     | 4       | 2017
4  | B1     | 2       | 2018

我的查询:

select s.id, s.name, s.age, s.address, s.phone
from Registration r inner join Student s on r.student = s.id
where r.class = 'A1' and r.year = '2018'

结果:

id |  name  | age | address | phone 
---+--------+-----+---------+--------
1  | Alex   | 18  | aaaaaa  | 88888
3  | Mary   | 18  | ccccc   | 00000

那么,我如何设计dynamoDB表来实现这个结果呢?扩展为CRUD

感谢任何建议

1 个答案:

答案 0 :(得分:0)

DynamoDB表设计将在很大程度上取决于您的访问模式。如果不知道应用程序所需的完整要求和查询,就无法写出正确的答案。但鉴于您的示例,这里的表设计可能有效:

          | (GSI PK) |
(P. Key)  | (Sort)   |                                 (GSI Sort)
studentId | itemType |  name  | age | address | phone | year 
----------+----------+--------+-----+---------+-------+------
1         | Details  | Alex   | 18  | aaaaaa  | 88888 |
1         | Class_A1 |        |     |         |       | 2018
2         | Details  | Tome   | 19  | bbbbbb  | 99999 |
2         | Class_B1 |        |     |         |       | 2018
3         | Details  | Mary   | 18  | ccccc   | 00000 |
3         | Class_A1 |        |     |         |       | 2018
4         | Details  | Peter  | 20  | dddddd  | 00000 | 
4         | Class_A1 |        |     |         |       | 2017

请注意全局二级索引,其中包含项类型上的分区键和年份上的排序键。 通过这种设计,我们有一些查询选项:

1)获取给定id的学生:GetItem(partitionKey:studentId,sortkey:Details)

2)获取给定学生ID的所有课程:查询(partitionKey:studentId,sortkey:STARTS_WITH(" Class"));

3)让所有学生进入A1班和2018年:查询(GSI分区密钥:" Class_A1",sortkey:equals(2018))

对于全局二级索引,分区和排序键不需要是唯一的,因此您可以拥有许多Class_A1,2018组合。如果您还没有阅读Best Practices for DyanmoDB,我强烈建议您完整阅读。