【问题标题】:DynamoDBMapper how to get all items without paginationDynamoDBMapper 如何在不分页的情况下获取所有项目
【发布时间】:2021-01-24 04:12:32
【问题描述】:

我在 DDB 中存储了大约 780K(count) 个项目。

我正在调用 DynamoDBMapper.query(...) 方法来获取所有这些。 结果很好,我可以得到所有的项目。但是我花了 3 分钟才拿到它们。

从日志中,我看到 DynamoDBMapper.query(...) 方法正在尝试逐页获取项目,每个页面将请求对 DDB 的单独查询调用,每个页面将花费大约 0.7 秒。 我数了一下,所有的项目都返回了 292 页,所以总时长约为 0.7*292=200s,这是不可接受的。 我的代码基本如下:

    // setup query condition, after filter the items count would be about 780K
    DynamoDBQueryExpression<VendorAsinItem> expression = buildFilterExpression(filters, expression); 

    List<VendorAsinItem> results = new ArrayList<>();
    try {
        log.info("yrena:Start query");
        DynamoDBMapperConfig config = getTableNameConfig();
        results = getDynamoDBMapper().query( // get DynamoDBMapper instance and call query method
                VendorAsinItem.class,
                expression,
                config);
    } catch (Exception e) {
        log.error("yrena:Error ", e);
    }
    log.info("yrena:End query. Size:" + results.size());

那么如何在不分页的情况下一次获取所有项目。 我的最终目标是减少查询持续时间。

【问题讨论】:

  • 可以使用do batch get代替查询。

标签: amazon-dynamodb dynamodb-mapper


【解决方案1】:

编辑 只是重新阅读问题的标题,然后意识到我可能没有直接解决问题:没有办法检索 780,000 个项目没有 some 分页,因为每页 1MB 的硬性限制


长答案

在 3 分钟内检索了 780,000 个项目,使用 292 页:大约每秒 1.62 页。

花点时间让它同步..

Dynamo 可以每页返回 1MB 的数据,因此您大概每秒传输 1.5MB 的数据(这将使 10 Mbit 管道饱和)。

没有关于 (a) 检索到的项目的实际大小的进一步细节; (b) 您的互联网连接带宽; (c) 可能从查询结果中过滤掉的项目数和 (d) 我将开始查看的表上的预置读取容量:

  1. 您的客户端和 Dynamo/AWS 之间的网络带宽是多少 - 如果您没有达到最大值,则继续下一步;

  2. 在表上配置了多少读取容量(如果您发现请求受到任何限制,您可以增加表上的 RCU 以提高速度,但需要付出金钱代价)

  3. 查询的效率:

  • 如果您正在应用过滤器,请知道这些过滤器是在生成查询结果后应用的,因此查询会消耗 RCU 来处理被过滤掉的内容,这也意味着查询效率低下

  • 考虑是否有办法优化查询以访问更少的数据

最后 780,000 个项目对于查询来说是很多 - 数据库中项目的百分比是多少?

您能否创建一个二级索引,该索引基本上包含大部分或所有数据,然后您可以简单地扫描而不是查询?

与查询不同,扫描可以并行进行,因此如果您的网络带宽、内存和本地计算足够大,并且您愿意在数据库上配置足够的容量,则可以比查询快得多地读取 780,000 个项目。

【讨论】:

    猜你喜欢
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 2019-01-16
    • 2012-04-18
    相关资源
    最近更新 更多