微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DynamoDBMapper 如何在没有分页的情况下获取所有项目

如何解决DynamoDBMapper 如何在没有分页的情况下获取所有项目

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

我正在调用 DynamoDBMapper.query(...) 方法获取所有这些。 结果很好,bcs 我可以得到所有的物品。但是我花了 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());

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

解决方法

编辑 只是重新阅读了问题的标题,并意识到我可能没有正面解决问题:没有一些,就无法检索 780,000 个项目 分页,因为每页 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 个项目。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?