我有两个表,这些表之间的某些字段具有多对多关系。如何在Amazon DynamoDB中实现此功能?
答案 0 :(得分:8)
快速回答:在您的代码中或对表进行非规范化(存储冗余数据)。
进行非标准化;换句话说,将冗余数据存储在中央“连接”表中,这样您就可以通过查询该表来获取所需的所有信息。这可能是您的最佳选择,但您需要记住在更新左侧或右侧表时更新中央表中的所有相关记录。这样做的成本是额外的数据存储,以及每次更新的额外编程麻烦。
做三个查询;拉入连接的中央表,然后在右侧和左侧表格中再插入两个查询。
另外两个混合选项:
第三个选项是仅在一个表中进行非规范化。在左侧表中有一列,用于存储连接数据的serialized()数组。所以你只需要拉入左表,你已经将所有的连接从右表中拉到。如果您更新右表,请不要执行此方法,因为您需要拉入所有左表,找到需要更新的位置,然后更新左表。讨厌 - 所以你可能会选择第四个选项...
在左表中存储相关ID的列表(以相同的序列化方式),这样您就可以拉入左表,取消IDS的分离并知道从右侧拉出的内容。这意味着两个查询,而不仅仅是三个。
哪一个适合您,实际上取决于程序,如果您只是“添加”数据或进行大量编辑和删除。如果它们都不起作用,那么考虑一个关系数据库。
原因(抱歉,如果您知道,但添加完整性)。
DynamoDB是一个noSQL数据库,专为非关系查询而设计。所以你不要做JOINS和外键和级联等等(是的,我在这里简化,但希望总结一下)。您在查询中引入数据并在代码中执行“JOIN”。外键和所有爵士乐并非真正发挥作用。
如果需要关系数据库,请使用关系数据库。
直接引用亚马逊模糊:
虽然Amazon DynamoDB解决了数据库的核心问题 可扩展性,管理,性能和可靠性,它不是一个 关系数据库,不支持复杂的关系查询 (例如加入)或复杂的交易。如果您的工作量需要这个 功能,或者您正在寻找与现有的兼容性 关系引擎,尝试使用Amazon Relational Database Service(RDS)。