如何设计 DynamoDB 表以方便按时间范围搜索和按唯一 ID 删除
Posted
技术标签:
【中文标题】如何设计 DynamoDB 表以方便按时间范围搜索和按唯一 ID 删除【英文标题】:How to design DynamoDB table to facilitate searching by time ranges, and deleting by unique ID 【发布时间】:2014-01-08 02:09:33 【问题描述】:我是 DynamoDB 的新手 - 我已经有一个插入数据的应用程序,但我在提取数据时遇到了困难。
要求:
-
每个客户必须有一个唯一的表
将文档插入表中(每个文档都有唯一的 ID 和时间戳)
根据时间戳获取 X 个文档(按升序排列)
根据唯一 ID 删除单个文档
到目前为止,我已经创建了一个包含复合键 (S:id, N:timestamp) 的表。但是,当我来查询它时,我意识到由于我的 id 是唯一的,因为我无法对 ID 进行通配符搜索,所以我将无法提取一系列项目...
那么,我应该如何设计我的表来满足这种情况呢?
编辑:这是我的想法:
主索引将是复合索引:(s:customer_id, n:timestamp) 其中客户 ID 在表中将是相同的。这将使我能够根据时间范围提取数据。
二级索引将是散列(s:unique_doc_id),我将能够使用此索引删除项目。
这听起来像是正确的解决方案吗?提前谢谢你。
【问题讨论】:
【参考方案1】:你可以满足这样的要求:
您的主键将是 h:customer_id 和 r:unique_id。这样可以确保表中的所有元素都有不同的键。
您还将拥有一个时间戳属性,并在其上拥有一个本地二级索引。
您将使用 LSI 执行需求 3,并使用 batchWrite API 调用执行需求 4 的批量删除。
此解决方案不需要 (1) - 所有客户都可以留在同一张桌子上(注意 - 在联系我们之前,每个帐户有 256 张桌子的限制)
【讨论】:
这实际上正是我最终在索引方面所做的!谢谢,很高兴看到我的想法是正确的!以上是关于如何设计 DynamoDB 表以方便按时间范围搜索和按唯一 ID 删除的主要内容,如果未能解决你的问题,请参考以下文章
如何共享 DynamoDB 表以在组织的其他成员之间保持透明?
如何按日期(范围键)查询 DynamoDB,没有明显的哈希键?
AWS AppSync GraphQL - 如何使用 PK/SK 查询而不是扫描整个 dynamoDB 表以获取 graphql 列表 API