java - 将 Datastax Cassandra 结果集与 Java 8 并行流一起使用 - 快速

标签 java list cassandra resultset datastax

我正在使用 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/

相关文章:

java - Prolog 嵌入 java 帮助中

python - 列表列表中元素的排列

Cassandra 脚本将日期更改为即时类型

Python - 在 'array' 中寻找最低位置

windows - Cassandra 不是从 cassandra -f 开始的

Cassandra 数据库 : Why less than query failed?

在 Linux 服务上运行时 Java 编码损坏?

java - Spring : Request method 'POST' not supported

java - 替换 java.net.URL

r - 在 R 中的循环中构建列表 - 获取正确的项目名称