按日期范围查询 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 的相关文章

  • AWS Lambda 处理来自 DynamoDB 的流

    我正在尝试创建一个消耗 dynamoDB 表中的流的 lambda 函数 但是我想知道处理在执行过程中可能因某些错误而未处理的数据的最佳实践是什么 例如 我的 lambda 失败并且丢失了部分流 这是重新处理丢失数据的最佳方法 这是为你处理
  • 查询 DynamoDB

    我有一个 DynamoDB 表 其中一个字母数字字符串作为哈希键 例如 d4ed6962 3ec2 4312 a480 96ecbb48c9da 我需要根据表中的另一个字段查询表 因此我需要查询来选择所有键 例如我的字段 x 位于 dat
  • C++ 中的 HMAC SHA256 (DynamoDB)

    我正在尝试通过 REST Web API 连接到 DynamoDB 它要求我使用 HMAC SHA256 生成签名 我已经让 SHA 256 工作了 但我似乎无法让 HMAC 工作 这里是 C 代码 使用 OpenSSL string hm
  • 如何使用 python3 在 aws 上使用过滤表达式作为嵌套映射属性?

    我一直在尝试扫描 DynamoDB 以检查名为 可交付成果 的嵌套地图属性中的特定值 但是 使用带有过滤表达式的扫描会导致空结果 import boto3 result dynamo client boto3 client dynamodb
  • 检索 DynamoDB 上以指定文本开头的列的所有项目

    我在 DynamoDB 中有一个表 Id int hash key Name string 还有很多列 但我省略了 通常 我只是根据项目的 ID 提取和更新项目 这个模式非常适合这种情况 然而 要求之一是有一个基于名称的自动完成下拉框 我希
  • DynamoDB:如何使用查询过滤器检查 MAP 中的条件

    我有一张表 结构如下 当我进行查询时 我希望能够对数据图进行查询过滤 但我不太确定如何设置查询 这是我到目前为止所拥有的 HashMap
  • java.lang.String 类型中没有由 @DynamoDBHashKey 注释的方法或字段

    我不知道为什么不运行这个项目 Data DynamoDBTable tableName tableName public class entityName implements Serializable private static fin
  • Heroku Dynos 是否享受 AWS 网络内的免费数据传输?

    我正在考虑将 Heroku 用于 NodeJS 应用程序 我想知道他们的 Dynos 是否享受 AWS 网络内的免费内部数据传输 我想使用 DynamoDB ElastiCache RDS SQS 和许多其他 AWS 产品 如果我可以从 H
  • 玩!框架+DynamoDB

    作为 Play 框架的新手 我想知道它是否比我想象的更容易 但是是否可以将 DynamoDB 与 Play 框架一起使用 由于 DynamoDB 是一个 NoSQL 数据库 我预计您需要使用特定的模块 而由于 Dynamo 最近才发布 因此
  • 如何使用dynamoose查询本地dynamoDB?

    作为一名开发人员 我不想一直连接到 Amazon Web 服务 我在本地计算机上安装了 DynamoDB 引用了AWS Docs https docs aws amazon com amazondynamodb latest develop
  • Dynamodb - 更新对象数组中 JSON 对象的值

    以下是存储在 DynamoDb 中的示例项目对象 记录 我使用 NodeJS 和AWS DynamoDB DocumentClient访问数据库 我正在构建一个 PUT 函数来更新数组中 JSON 对象的状态 该函数将有权访问该项目的uui
  • DynamoDB:键及其含义

    我对如何使用 DynamoDB 表键感到困惑 该文档提到了 HASH 似乎也称为分区 键和 RANGE 或排序 键 我试图将这些与我之前对数据库索引理论的理解大致保持一致 我目前主要基于猜测的理解是 HASH 键本质上是主键 它必须是唯一的
  • DynamoDb:通过字符串连接执行 updateExpression

    有没有办法通过 UpdateExpressions 连接字符串 让我更好地解释一下 例如 如果一条记录有 id 线程和消息 并且出于某种原因 我打算使用记录中已存在的信息更新一个属性 我可以执行如下表达式 updateExpression
  • AWS IAM——使用条件

    我是 AWS 中的 IAM 新手 而且 我希望将各种用户的查询限制为仅主键与 cognito id 匹配的表条目 为了实现这一目标 我制定了政策 Version 2012 10 17 Statement Sid AllowAccessToO
  • 从 apache Spark 读取/写入 dynamo 数据库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道是否有任何 Java 库支持从 apache Spark Mesos 读取 写入 dynamo
  • 具有专用启动键的 DynamoDB 全球二级索引

    通过全局二级索引查询 DynamoDB 表时是否可以指定独占开始键 我正在使用 aws java sdk 版本 1 6 10 并使用QueryExpression and a DynamoDBMapper 这是我想做的事情的要点 Mappe
  • 全文搜索 DynamoDB

    以下情况 我正在为我的客户将元素存储在 DyanmoDb 中 HashKey 是元素 ID Range Key 是客户 ID 除了这些字段之外 我还存储一个字符串数组 gt 标签 例如 Pets House 和多行文本 我想在我的应用程序中
  • AWS Lambda 调用错误未触发 SQS 死信队列

    我有一个 AWS Lambda 函数 它订阅 DynamoDB 流并配置了SQS 死信队列 DLQ https docs aws amazon com lambda latest dg dlq html 我可以看到管理控制台中配置了正确的队
  • DynamoDB 中的时间戳应使用什么数据类型?

    我是 DynamoDB 新手 我希望创建一个使用 DeviceID 作为哈希键 时间戳作为范围键和一些数据的表 DeviceID 123 Timestamp 2016 11 11T17 21 07 5272333Z X 12 Y 35 在
  • DynamoDB 如何查询重叠的时间范围

    考虑一个由主键和两个描述开始日期和结束日期的属性组成的 DynamoDB 表 如何在不扫描全表的情况下查询某个时间范围是否与表中的时间范围重叠 例子 dynamo表有两条记录 PK Start End A 2019 01 01 2019 1

随机推荐