如何设计 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

如何在 DynamoDB 中查询不存在的(空)属性

按日期查询DynamoDB

如何更改现有表以在 Oracle 中创建范围分区