复合排序键 - 分别复制属性

问题描述 投票:0回答:1

根据我对 DynamoDB 上复合排序键的理解,它在查询方面提供了更大的灵活性,并且比创建全局二级索引的成本更低。

假设我正在创建一个包含限时帖子的博客,并且我希望能够仅查询

  • 未过期(检查过期日期是否已过),
  • 对于某个类别,
  • 将“特色”属性设为 true

我会考虑采用以下复合排序键:

expiry#category#featured

问题:

  • 这是一个合乎逻辑且高效的设计吗?
  • 您是否可能还希望将其中任何一个作为表中的单独属性(例如“到期”列),为什么?
  • 为什么不将所有属性都包含在复合排序键中以获得最大的查询灵活性?

人工智能的答案往往对于你应该使用什么非常犹豫不决,因此具体的建议将不胜感激。主要访问模式将按类别显示帖子,并能够按用户搜索帖子。过期的帖子永远不应该是可见的。

amazon-web-services database-design amazon-dynamodb dynamodb-queries composite-key
1个回答
0
投票

排序键始终从左到右进行评估,如果这适合您的访问模式,那么它就非常有意义。使用复合排序键时需要注意以下事项:

  1. 确保它适合您的读取访问模式,确保您知道它是从左到右评估的。您不能在排序键上使用
    contains
    ends_with
  2. 确保存储在排序键中的任何值不经常更新,您无法更新排序键值,您需要删除Item和putItem。

至于将值存储为独立属性,我始终建议您这样做。访问模式将来可能会发生变化,并且能够对其中一个属性进行索引非常重要。此外,它还允许您轻松过滤读取和/或条件写入以及过滤 Lambda 事件。

© www.soinside.com 2019 - 2024. All rights reserved.