amazon-web-services - 通过查询 DynamoDB 最大 1MB 可以获得的最佳性能是多少?

标签 amazon-web-services amazon-dynamodb

我正在使用 DynamoDB 来存储数据。我发现 1MB 是查询返回的硬限制。我有一个案例,查询一个表以获取一个分区中 1MB 的数据。我想知道我能得到的最佳性能是多少。

根据DynamoDB文档,一个分区最多可以有3000个RCU。如果我发送最终一致性读取,它应该支持每秒响应 3000 * 8KB = 24000KB = 23MB。

如果我发送一个查询请求以从一个分区获取 1MB,这是否意味着它应该响应 1/23 秒 = 43 毫秒?

我正在 lambda 中进行测试,在启用 XRay 的情况下向 DynamoDB 发送查询。根据 XRay 跟踪,它显示查询多花费了 300 毫秒。所以我不明白为什么会导致长时间的延迟。

如果我想将延迟减少到个位数毫秒,该怎么办?我不想分割分区,因为 1MB 并不是很大。

最佳答案

DynamoDB 确实能够实现个位数毫秒的延迟,但前提是项目大小足够小以适合 1 个 RCU。在 <10 毫秒内从数据库读取 1 MB 数据本身就是一项具有挑战性的任务。

您可以尝试以下方法:

  1. 将读取操作分成两部分。

一个将使用 ScanIndexForward: true + Limit: N/2 进行查询,另一个将使用 ScanIndexForward: false + Limit 进行查询:N/2。思路是从两端到中间查询相同的数据。

并行执行此操作,然后将两个响应合并为一个。 然而,这可能会将延迟从 300 毫秒减少到 150 毫秒,但仍然不是 <10 毫秒。

  • 使用 DAX - DynamoDB Caching Layer
  • 如果您的 1 MB 数据分布在数千个项目中,请考虑使用更少的项目,但每个项目内部会保存更多数据。
  • 考虑使用类似 brotli 的压缩算法压缩您存储在 1 个 DynamoDB 项目中的数据。有一次我用这种方法取得了成功。根据格式的不同,它可以轻松地将数据大小减少 4 倍,这意味着查询时间加快约 4 倍!使用第 #1 项中描述的方法,速度可以提高 8 倍。
  • 另外,请注意,不断从数据库读取 1 MB 的数据会产生巨大的成本。

    关于amazon-web-services - 通过查询 DynamoDB 最大 1MB 可以获得的最佳性能是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68629860/

    相关文章:

    java - 带 Elastic Beanstalk 的 Amazon DynamoDB 表未设置正确的参数

    amazon-web-services - 适用于 SSM 获取参数的 AWS SAM 托管策略

    amazon-web-services - AWS Cloudformation 输出

    amazon-web-services - 何时使用 S3 API 分页

    amazon-web-services - 无法标记在 CloudFormation 中创建的 IAM 用户

    amazon-web-services - Kubernetes为什么尝试为服务类型ClusterIP创建负载平衡器?

    amazon-dynamodb - 尝试将相同的值放入项目列表中并获得 ValidationException

    amazon-dynamodb - DynamoDB 中条件写入的日期时间比较

    amazon-dynamodb - 从 DynamoDB 获取最近的 N 个项目

    amazon-web-services - GSI 与表的区别