Amazon DynamoDB和多对多关系

时间:2012-06-27 11:09:13

标签: php database nosql amazon

我有两个表,这些表之间的某些字段具有多对多关系。如何在Amazon DynamoDB中实现此功能?

1 个答案:

答案 0 :(得分:8)

快速回答:在您的代码中或对表进行非规范化(存储冗余数据)。

  1. 进行非标准化;换句话说,将冗余数据存储在中央“连接”表中,这样您就可以通过查询该表来获取所需的所有信息。这可能是您的最佳选择,但您需要记住在更新左侧或右侧表时更新中央表中的所有相关记录。这样做的成本是额外的数据存储,以及每次更新的额外编程麻烦。

  2. 做三个查询;拉入连接的中央表,然后在右侧和左侧表格中再插入两个查询。

  3. 另外两个混合选项:

    1. 第三个选项是仅在一个表中进行非规范化。在左侧表中有一列,用于存储连接数据的serialized()数组。所以你只需要拉入左表,你已经将所有的连接从右表中拉到。如果您更新右表,请不要执行此方法,因为您需要拉入所有左表,找到需要更新的位置,然后更新左表。讨厌 - 所以你可能会选择第四个选项...

    2. 在左表中存储相关ID的列表(以相同的序列化方式),这样您就可以拉入左表,取消IDS的分离并知道从右侧拉出的内容。这意味着两个查询,而不仅仅是三个。

    3. 哪一个适合您,实际上取决于程序,如果您只是“添加”数据或进行大量编辑和删除。如果它们都不起作用,那么考虑一个关系数据库。


      原因(抱歉,如果您知道,但添加完整性)。

      DynamoDB是一个noSQL数据库,专为非关系查询而设计。所以你不要做JOINS和外键和级联等等(是的,我在这里简化,但希望总结一下)。您在查询中引入数据并在代码中执行“JOIN”。外键和所有爵士乐并非真正发挥作用。

      如果需要关系数据库,请使用关系数据库。

      直接引用亚马逊模糊:

        

      虽然Amazon DynamoDB解决了数据库的核心问题   可扩展性,管理,性能和可靠性,它不是一个   关系数据库,不支持复杂的关系查询   (例如加入)或复杂的交易。如果您的工作量需要这个   功能,或者您正在寻找与现有的兼容性   关系引擎,尝试使用Amazon Relational Database Service(RDS)。