我正在使用 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 数据本身就是一项具有挑战性的任务。
您可以尝试以下方法:
- 将读取操作分成两部分。
一个将使用 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/