0

我正在尝试在 DynamoDB 中的 Instagram 和 Facebook 等 LIKE 和 COMMENT 系统中实现

我有 3 个表,用户、照片和 photo_likes

user 表和 photo 表有 user_id 和 photo_id 键。

对于 photo_likes 表,我将 photo_id 作为键,并以 like_by 列存储 user_id 作为列表。

因此,如果 user_id 10、35 喜欢 photo_id 1,我将其存储为:

| photo_id | liked_by |
|     1    |  {10,35} |

如果这是正确的方法,我真的很困惑?或者我应该只要他们是新的喜欢就插入一个新行。

| photo_id | user_id  |
|     1    |    10    |
|     1    |    35    |
4

1 回答 1

1

我将提供上述方法的优点和缺点。您可能需要根据应用程序所需的查询访问模式选择正确的方法。

方法一:

| photo_id | liked_by |
|     1    |  {10,35} |

优势与建议:-

  • 我的建议是存储liked_byasNSSS而不是 List。这样它就不会有重复。
  • 所有这些liked_by都存在于同一个项目中。如果需要,这将有助于检索和在 GUI 上显示结果

坏处:-

  • 无法在非标量数据类型(SS、NS 或 List)上创建索引(如果需要)
  • 请注意 DynamoDB 中项目的最大大小 (400 KB)。如果喜欢的数量增加到可能影响项目大小的意外值,这可能会影响数据模型

方法二:

| photo_id | user_id  |
|     1    |    10    |
|     1    |    35    |

您可以定义photo_id为分区键和user_id排序键。

优势:-

  • 如果需要,您可以在 user_id 上创建索引
  • 您可以按 user_id 对数据进行排序(如果定义为排序键)
  • 无需担心 400 KB 的项目大小

坏处:-

  • 计算likes应该在客户端通过迭代值来完成。在方法 1 中,您可以使用 somearray.length来获取likes计数
  • 查询结果集中的项目数会很高,这可能难以处理。这一点取决于您是否有一个用例来获取照片列表及其likes计数或任何类似的场景
于 2017-07-21T13:23:18.693 回答