【问题标题】:What is the best performance I can get by querying DynamoDB for a maximum 1MB?通过查询 DynamoDB 最大 1MB 可以获得的最佳性能是多少?
【发布时间】:2021-08-03 15:10:47
【问题描述】:

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

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

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

我在 lambda 中进行测试,向启用了 XRay 的 DynamoDB 发送查询。它向我展示了基于 XRay 跟踪的查询需要多花 300 毫秒。所以我不明白为什么会导致长时间的延迟。

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

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb


    【解决方案1】:

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

    您可以尝试以下方法:

    1. 将您的读取操作一分为二。

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

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

    1. 使用 DAX - DynamoDB Caching Layer
    2. 如果您的 1 MB 数据分布在数千个项目中,请考虑使用更少的项目,但每个项目本身会包含更多数据。
    3. 考虑使用像 brotli 这样的压缩算法来压缩存储在 1 个 DynamoDB 项目中的数据。一旦我用这种方法取得了成功。根据格式的不同,它可以轻松地将您的数据大小减少 4 倍,这意味着查询时间快了约 4 倍!使用第 1 项中描述的方法可能会快 8 倍。

    另外,请注意,不断地从数据库中读取 1 MB 的数据会产生巨大的成本。

    【讨论】:

    • 感谢您的回复。在您的第一个解决方案中,如果我发送更多小查询怎么办?像 N/10。这会减少查询时间吗?我认为它也会增加消耗的读取容量?
    • 它不会消耗更多的读取容量。最后,您将获取相同数量的数据。是的,您可以发送较小的查询,例如 N/10,但前提是您知道排序键的范围,并且可以分块排序键的值,并且知道第 8 块排序键值将如何开始。跨度>
    • 我在这里写过其中一种方法:vladholubiev.medium.com/…
    猜你喜欢
    • 2022-01-23
    • 2015-05-17
    • 1970-01-01
    • 2017-03-24
    • 2022-01-20
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 2010-10-23
    相关资源
    最近更新 更多