【问题标题】:DynamoDb database designDynamoDb 数据库设计
【发布时间】:2017-08-05 18:33:14
【问题描述】:

我是 DynamoDb 和 noSql 的新手。

我有一个users 表和一个notes 表。用户可以创建笔记,我希望能够检索与用户关联的所有笔记。

我想到的一个解决方案是,每次保存笔记时,笔记 ID 都会存储在用户表内的“笔记”属性中。这将允许我在 users 表中查询所有笔记 id,然后使用这些 id 查询笔记:

UserTable:
UserId: 123456789
notes: ['note-id-1', note-id-2]

NotesTable
id: note-id-1
text: "Some note"

这是正确的方法吗?我能想到的唯一另一种方法是让 notes 表有一个 userId 属性,这样我就可以根据该 userId 查询 notes 表。显然,这是一种更具关联性的方法。

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb nosql


    【解决方案1】:

    我会在你的问题结束时采用这种方法:每个笔记都应该有一个 userId 属性。然后创建一个以userId为主键、noteId为排序键的全局二级索引。这样,您还可以通过对该索引进行查询来查询 userId。

    如果按照建议的方式进行操作,则始终需要两次查询才能获取用户的注释(首先从用户表中获取注释,然后在注释表上进行查询)。此外,当某人有 N 个笔记时,您需要进行 N 个查询,如果 N 很大,这将是昂贵的。

    如果您按照此答案的方式进行操作,则需要一个查询来获取用户的所有注释(我假设没有分页)和一个查询来获取用户信息。永远不会超过 2 个。

    一般经验法则:

    • SQL:存储 = 昂贵,计算 = 便宜
    • NoSQL:存储 = 便宜,计算 = 昂贵

    所以总是尽量减少查询次数。

    【讨论】:

    • 感谢 Luc,我的眼睛已经打开了二级索引的世界!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 2011-09-30
    • 2011-01-12
    相关资源
    最近更新 更多