有离开如在下面的表中描述的数据集。 Sr.no在下面的表仅用于参考
|sr.no| id | tis |data-type| b.id |idType_2| var_2 |
|-----|----------|-----|---------|----------|--------|--------|
| 1 |abc-def-gi|12345| a-type |1234567890| 843023 | NULL |
|-----|----------|-----|---------|----------|--------|--------|
| 2 |1234567890|12346| b-type | NULL | NULL |40030230|
|-----|----------|-----|---------|----------|--------|--------|
| 3 |abc-def-gj|12347| a-type |1234567890| 843023 | NULL |
查询类型
id
如果data-type
是a-type
回报领域tis,b.id,id_type2
参考sr.no=1
id
如果data-type
是b-type
回报场var_2
参考sr.no=2
id_type2
返回id,tis,b.id
的sr.no=1,3
领域data-type
基于id
返回tis between 12345 and 12347
注意
sr.no=1,3
或数据的a-type
插入100K一个一天时间具有独特id
sr.no=2
或数据的b-type
是一组固定的数据。是键下面的方法高效地为这样的数据集?有没有可以遵循,以存储和DynamoDB检索数据的任何其他的方法呢?
Partition Key = id
to需要查询1,2的照顾。
GSI1=id_type2 and GSI1SK=id
照顾查询3
GSI2=data-type and GSI2SK=tis
照顾查询4
这里是我的想法:
1)如果你有一个具有不同的访问模式的数据,你应该考虑拆分数据放入不同的表
2)如果数据被访问一起,将它存储起来 - 这是什么意思是,如果当你读一个类型的数据对于一些建模的实体,您还需要读取一个或多个B型记录同一实体,这是有利将所有这些记录在同一个表,相同分区键下
为了使这一切的家,在你的榜样,A型和B型数据的ID是不同的。这意味着,你在同一个表中存储两个A型和B型得到0好处。使用两个不同的表。
3)未一起访问的数据不被放置在同一个表中的所有受益,实际上有可能成为更极端的情况下,问题的潜力
关系与非关系数据库之间的主要差别在于,在非关系存储你没有交叉表连接,因此而关系数据库的原则之一是数据归一化相对趋于对非关系的情况。