sách gpt4 ai đã đi

Cassandra datastax 驱动 ResultSet 在多个线程中共享以实现快速读取

In lại 作者:行者123 更新时间:2023-12-01 22:57:09 25 4
mua khóa gpt4 Nike

我在 cassandra 中有巨大的表,超过 20 亿行并且还在增加。这些行有一个日期字段,它遵循日期桶模式以限制每一行。

即便如此,对于某个特定日期,我也有超过一百万条条目。

我想尽快读取和处理每一天的行。我正在做的是获取 com.datastax.driver.core.ResultSet 的实例并从中获取迭代器并跨多个线程共享该迭代器。

所以,基本上我想增加读取吞吐量。这是正确的方法吗?如果没有,请提出更好的方法。

1 Câu trả lời

不幸的是,您不能按原样执行此操作。原因是 ResultSet 提供了 internal paging state。用于一次检索一页的行。

但是您确实有选择。由于我想您正在执行范围查询(跨多个分区的查询),因此您可以使用一种策略,即使用 token 指令一次提交跨 token 范围的多个查询。 Paging through unordered partitioner results 中记录了一个很好的例子.

java-driver 2.0.10 和 2.1.5 都提供了一种从主机和 splitting them 检索 token 范围的机制。 .在 TokenRangeIntegrationTest.java#should_expose_token_ranges() 中的 java 驱动程序集成测试中有一个如何执行此操作的示例。 :

    PreparedStatement rangeStmt = session.prepare("SELECT i FROM foo WHERE token(i) > ? and token(i) <= ?");

TokenRange foundRange = null;
for (TokenRange range : metadata.getTokenRanges()) {
List rows = rangeQuery(rangeStmt, range);
for (Row row : rows) {
if (row.getInt("i") == testKey) {
// We should find our test key exactly once
assertThat(foundRange)
.describedAs("found the same key in two ranges: " + foundRange + " and " + range)
.isNull();
foundRange = range;
// That range should be managed by the replica
assertThat(metadata.getReplicas("test", range)).contains(replica);
}
}
}
assertThat(foundRange).isNotNull();
}
...
private List rangeQuery(PreparedStatement rangeStmt, TokenRange range) {
List rows = Lists.newArrayList();
for (TokenRange subRange : range.unwrap()) {
Statement statement = rangeStmt.bind(subRange.getStart(), subRange.getEnd());
rows.addAll(session.execute(statement).all());
}
return rows;
}

您基本上可以生成您的语句并以异步方式提交它们,上面的示例只是一次遍历语句。

另一种选择是使用 spark-cassandra-connector ,这基本上是在幕后以一种非常有效的方式进行的。我发现它非常易于使用,您甚至不需要设置 spark 集群即可使用它。参见 this document了解如何使用 Java API。

关于Cassandra datastax 驱动 ResultSet 在多个线程中共享以实现快速读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30073253/

25 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com