And*_*708 4 database amazon-web-services amazon-dynamodb
我试图围绕如何在DynamoDB中设计表格.我需要一个Subscription表来存储公司每个订阅的项目.所以我计划了以下属性.
我已经阅读了很多关于索引在DynamoDB中如何在二级索引方面工作的内容,但我真的很难理解这一切.似乎我读的越多,我就越困惑.我理解全局二级索引和本地二级索引的核心概念以及哈希键+范围键.问题是将它们放在一起并设计一个支持我的查询要求的表.
截至目前,我有以下查询要求:
CompanyID和比较StartDate,并EndDate给定日期ProductID在将来(或现在),我希望能够查询给定的所有活动订阅ProductID.我最初的计划是使用SubscriptionID散列键和CompanyID作为范围键来有效查询给定公司的订阅.但是,我不确定是否可以单独查询范围键?我知道散列键和范围键的组合是唯一的(复合键),但在执行范围键的查找时是否总是需要包含散列键?
我也在考虑制作本地二级索引StartDate并EndDate有效地查询给定公司的活动订阅,但我不确定是否应该创建这些全局二级索引,而不是当我想查询所有活动订阅时(对于所有活动订阅)公司)?我的猜测是肯定的,因为我需要查询所有分区,而不仅仅是单个公司的分区.
就像我提到的那样,我对这些概念有了基本的了解,但我的斗争是在查询表/索引以及哪些查询模式时,主键和全局/本地二级索引的每个组合都成为可能/不可能.我发现很难掌握键值存储与二级索引提供的附加功能的组合.如果有人能给我一个如何设计表并解释原因的例子,比如各种选择如何支持我的特定查询要求,我真的很乐意.
我知道很多这些东西都有记录,但我很难在这种情况下使用这些信息.我希望有人能提供帮助.那么:你将如何设计表来支持我列出的查询以及为什么?
给出一些假设,这是一个提案:
表设计:
全球二级指数:
查询:
公司查询给定日期的活动订阅:使用CompanyID-StartDate-index,查询CompanyID = :companyid, StartDate <= :date,添加过滤器EndDate >= :date
公司查询给定日期的给定产品的有效订阅:使用CompanyID-ProductID-index,查询CompanyID = :companyid, ProductID = :productid,添加过滤器StartDate <= :date,添加过滤器EndDate >= :date
查询给定日期的给定产品的活动订阅:使用ProductID-StartDate-index,查询ProductID = :productid, StartDate <= :date,添加过滤器EndDate >= :date
您可以在AWS DynamoDB控制台中相当快速地尝试所有这些.我在撰写本文时建议使用测试版控制台,因为它允许您向查询添加过滤器,而生产控制台似乎只允许在扫描时使用过滤器.
| 归档时间: |
|
| 查看次数: |
580 次 |
| 最近记录: |