php Amazon DynamoDB和多对多关系

u0sqgete  于 2023-02-21  发布在  PHP
关注(0)|答案(1)|浏览(134)

我有两个表,表之间的一些字段具有多对多关系,如何在Amazon DynamoDB中实现这个特性?

wj8zmpe1

wj8zmpe11#

快速解答:在代码中或反规范化表(存储冗余数据)。
1.反规范化;换句话说,将冗余数据存储在中央"连接"表中,这样您就可以通过查询该表获得所有想要的信息。2这可能是您最好的选择,但您需要记住,在更新左表或右表时,更新中央表中的所有相关记录。3这样做的代价是额外的数据存储,以及每次更新时额外的编程麻烦。
1.执行三个查询;拉入连接的中央表,然后用另外两个查询拉入左右表。
另外两种混合动力选项:
1.第三种选择是只在一个表中反规范化。在左边的表中有一列存储了序列化的()数组的连接数据。因此,您只需要拉入左表,并且您已经将所有连接从右表拉入。如果您更新右表的次数与拉入所有左表的次数一样多,则不要使用此方法,找到需要更新的地方,然后更新他离开的表。讨厌-所以你可能会爱上第四个选择...
1.在左边的表中存储一个相关id的列表(以相同的序列化方式),这样您就可以拉入左边的表,解序列化IDS并知道从右边拉入什么,这意味着两个查询而不是三个。
哪一个适合你,这取决于你的程序,以及你是只"添加"数据还是做大量的编辑和删除工作,如果它们都不起作用,那么考虑关系数据库。
原因(抱歉,如果你知道它,但补充完整)。
DynamoDB是一个noSQL数据库,它是为非关系查询设计的。不要使用JOIN、外键和级联等(是的,我在这里进行了简化,但希望这样就能简单地总结一下)。您在查询中提取数据,并在代码中执行"JOIN"操作。外键和所有这些花哨的操作实际上并不起作用。
如果您需要关系数据库,那么就使用关系数据库。
直接引用亚马逊的广告语:
虽然Amazon DynamoDB解决了数据库可伸缩性、管理、性能和可靠性的核心问题,但它不是关系数据库,不支持复杂的关系查询(例如联接)或复杂的事务。如果您的工作负载需要此功能,或者您正在寻找与现有关系引擎的兼容性,请尝试Amazon关系数据库服务(RDS)。

相关问题