Database design 在dynamodb中存储树状结构
我有一个树状结构Database design 在dynamodb中存储树状结构,database-design,tree,amazon-dynamodb,Database Design,Tree,Amazon Dynamodb,我有一个树状结构 (T) M1 M2 M3 M4 M1L1 M1L2 M2L1 M3L1 M4L 其中T为顶层,M1、M2、M3、M4为T的子级,M1L1、M1L2为M1的子级,依此类推。树的最大高度为3。可以存在的最大节点数为50k。我想把它存储在数据库中。我希望存储在DynamoDB中,因为我现在所有的基础设施都在DynamoDB中,如果可能的话,我希望将其保存在DynamoDB中 我需要执行以下类型的查询: 1-给定
(T)
M1 M2 M3 M4
M1L1 M1L2 M2L1 M3L1 M4L
其中T为顶层,M1、M2、M3、M4为T的子级,M1L1、M1L2为M1的子级,依此类推。树的最大高度为3。可以存在的最大节点数为50k。我想把它存储在数据库中。我希望存储在DynamoDB中,因为我现在所有的基础设施都在DynamoDB中,如果可能的话,我希望将其保存在DynamoDB中
我需要执行以下类型的查询:
1-给定一个m1L1返回所有相同级别的孩子(m1L1,m1l2)
2-给定m1L1 id返回顶层(T)和M1
3-给定一个T返回所有毫秒
4-给定T返回所有Ms和lowerLevel以及关系
5-给定一个M1返回值,所有水平(M1、m2、m3)
6-给出M1返回所有子项
7-给定M1返回最高液位
我考虑了以下数据库模式:
Primary Key (id of the node) Children Parent Sibling
T M1, M2,M3,M4 null null
M1 M1L1,M1L2 T M2, M3, M4
M2 M2L1 T M1, M3, M4
M1L1 null M1 M1L2
我正在考虑使用AppendSet()插入到子/父/兄弟关系中
通过这种方法,我的大多数查询都是可能的,尽管我可能需要调用DDB两次,例如:如果我想得到给定T的所有子项的列表,即T得到M1、M2、M3、M4。然后对M1、M2、M3、M4进行批处理
然而,这种方法的问题在于我的想法。当我插入数据库时,我必须在多行中更新。此外,我没有使用任何可能不太好的索引。我是否以错误的方式处理此问题?使用1个GSI可以解决此问题。 你们可以有如下表格
| Node | Level | parent |
| T | 0 | NOT |
| M1 | 1 | T |
| M2 | 1 | T |
| M3 | 1 | T |
| M4 | 1 | T |
| M1L1 | 2 | M1#T |
| M1L2 | 2 | M1#T |
... so on
将节点作为主键,
级别,父级分别作为GSI的主键和排序键
下面是您的用例的样子(这些是类似sql的语法,可以从sdk轻松地移植到dynamodb查询)
选择节点=x的父节点