我正在使用 Datastax 驱动程序从 Cassandra 获取大量行,我需要尽快处理它们。
我研究过使用 List::parallelStream().forEach()
起初看起来很棒,因为 ResultSet
的行为很像 List
,但遗憾的是我无法直接在 ResultSet
上使用 parallelStream()
。为了让它工作,我首先必须使用 ResultSet::all()
这真的很慢 - 我假设它迭代每个元素。
ResultSet rs = this.getResultSet(); // Takes <1 second
// Convert the ResultSet to a list so as I can use parallelStream().
List<Row> rsList = rs.all(); // Takes 21 seconds
rsList.parallelStream().forEach(this::processRow); // Takes 3 seconds
有没有更快的方法可以处理结果集的每一行?
最佳答案
To get this to work I first have to use ResultSet::all() which really is slow
ResultSet.all()
将使用服务器端分页 获取所有行。您可以使用 statement.setFetchSize()
Is there any faster way I can process each row of the result set?
这取决于您的查询,它是什么?如果你正在做一个完整的分区扫描,只有几台机器在做这项工作,但如果你从多个分区获取数据,你可以尝试用多个查询来并行化它们,每个分区一个查询
关于java - 将 Datastax Cassandra 结果集与 Java 8 并行流一起使用 - 快速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35225207/