我有两个桌子,和桌子之间的一些领域有许多一对多的关系。 我如何能实现在亚马逊DynamoDB这个功能吗?
Answer 1:
快速回答:无论是在你的代码或反规范化的表(存储冗余数据)。
非规范化; 。换句话说,在中央“加盟”表店的冗余数据,这样你可以得到所有你想要通过查询一个表中的信息。 这可能是你最好的选择,但你必须记住更新所有相关记录在中央台当您更新左或右表。 这样做的代价是额外的数据存储,并为每个更新的其他程序的麻烦。
做到三个查询; 拉在中央台的连接,然后将与另外两个查询的左,右表。
其他两种混合选项:
第三个选项是只在一个表中denormalise。 在你的左表有存储连接数据的序列化()阵列。 所以,你只需要在左表拉第二你已经拥有的所有连接到右表来。 如果您更新右表就像你需要在所有的左表拉,寻找到需要更新,然后更新他离开桌子不要做这种做法。 讨厌的 - 所以你可能会下降为第四个选项...
存储在左表相关的ID列表(在同一个序列化的方式),这样你就可以在左表拉,unseralise的IDS,知道从右侧拉什么。 这意味着两个查询,而不是只有三个。
哪一个对你的作品真的取决于程序,如果你永远只能“增加”的数据或做大量的编辑和删除。 如果没有他们的工作,然后再考虑一个关系数据库。
原因(对不起,如果你知道它,但增加的完整性)。
DynamoDB是一种NoSQL数据库,这是专为无关系查询。 所以,你不;吨做连接和外键和级联等。(是的,我在这里简单化,但希望这概括起来概括地说)。 你拉在数据查询和在你的代码做的“加入” S。 外键和所有的爵士乐不是没有真正发挥作用。
如果你想要一个关系数据库中,然后使用关系数据库。
要直接引用亚马逊导语:
虽然亚马逊DynamoDB数据库铲球可扩展性,管理,性能和可靠性的核心问题,它不是一个关系数据库不支持复杂关系查询(例如联接)或复杂的交易。 如果您的工作负载需要此功能,或者您正在使用现有关系引擎寻找兼容性,尝试亚马逊关系数据库服务(RDS)。