按日期范围查询 dynamoDB

2024-02-17

我正在开发一个允许用户读书的应用程序。我正在使用 DynamoDB 来存储用户阅读的书籍的详细信息,并且我计划使用 DynamoDB 中存储的数据来计算统计数据,例如趋势书籍、作者等。

我当前的架构如下所示:

user_id | timestamp | book_id | author_id 

user_id 是分区键,timestamp 是排序键。

我遇到的问题是,使用这个模式我只能查询 单个用户(分区键)已阅读的书籍的详细信息。这是对我的要求之一。

另一个需求是查询某个日期范围内创建的所有记录,例如:过去7天内创建的记录。使用此架构,我无法运行此查询。

我研究了很多其他选项,但还没有找到一种方法来创建允许我运行这两个查询的模式。

  • 检索单个用户阅读的书籍记录(可以做)。
  • 检索最近x天内所有用户阅读的书籍记录(无法做到)。

我不想运行扫描,因为它会很昂贵,并且我研究了使用 GSI 作为时间戳的选项,但它要求我指定哈希键,因此我无法查询 2 个日期之间创建的所有记录。


一种简单的解决方案是创建一个 GSI,在所有书籍中使用恒定的哈希键,并将时间戳作为范围键。这将允许您执行您类型的查询。

这种方法的问题在于它可能成为扩展瓶颈,因为相同的哈希键意味着相同的节点。此问题的一个解决方法是进行分片:创建一组哈希键(例如:从 1 到 10)并将该组中的随机键分配给每本书。然后,当您进行查询时,您将需要进行 10 次查询并合并结果。您甚至可以动态设置此设置大小,以便它随着您的数据而缩放。

我还建议针对此用例研究其他工具(不是 DynamoDB),因为 DDB 不是数据分析的最佳工具。例如,您可以将 DynamoDB 数据输入 CloudSearch 或 ElasticSearch 并在那里进行分析。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按日期范围查询 dynamoDB 的相关文章

随机推荐