5

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

4

1 回答 1

9

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

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

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

另外两个混合选项:

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

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

哪一个适合你真的取决于程序,以及你是否只“添加”数据或进行大量编辑和删除。如果它们都不起作用,那么考虑使用关系数据库。


原因(对不起,如果你知道,但为了完整性而添加)。

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

如果你想要一个关系数据库,那么使用关系数据库。

直接引用亚马逊简介:

虽然 Amazon DynamoDB 解决了数据库可扩展性、管理、性能和可靠性等核心问题,但它不是关系数据库,不支持复杂的关系查询(例如连接)或复杂的事务。如果您的工作负载需要此功能,或者您正在寻找与现有关系引擎的兼容性,请尝试使用 Amazon Relational Database Service (RDS)。

于 2012-06-27T12:46:59.350 回答