【发布时间】:2016-03-09 18:05:10
【问题描述】:
我需要在 dynamodb 中创建一个朋友表。我正在尝试决定如何设计表格,并查看了亚马逊团队成员曾经推荐的内容。
他们推荐一种双向关系:
Friend 1 | Friend 2
-------------------
BOB | ALICE
ALICE | BOB
ALICE | JOHN
然后你可以查询好友 1 来获取所有好友。我看到的问题是这不是跨国的。例如说 BOB 不想再和 ALICE 做朋友了。我们需要删除 2 条记录,这样当 BOB 和 ALICE 查询他们的朋友列表时,他们就不会出现在任何一个列表中。问题是如果只有一个删除操作成功(例如网络丢失或超过吞吐量)怎么办?那么对于 BOB 来说,Alice 仍然是 f 朋友,但对于 Alice,BOB 不再是朋友。这是不一致的。我认为这将是非常糟糕的做法。我是否遗漏了什么,因为这对我来说是一个理想的设计,但对我来说这个问题会让它无法接受?我的想法是建立一种单向关系,然后在 Friend 2 上创建一个全局二级索引,这样我的读取量就会加倍(表上读取 1 次,索引上读取 1 次),但只有一个项目用于关系,如果说我需要删除它是安全的,因为如果 BOB 或 ALICE 不想再成为朋友,则只有一个项目可以删除。推荐的解决方案是好的,我遗漏了一些东西,还是存在缺陷,是否有更好的解决方案?如果可以的话,我想避免使用全局索引,因为它会自动使我的成本翻倍,但目前我没有看到更好的方法。
【问题讨论】:
标签: amazon-web-services database-design amazon-dynamodb database nosql