gpt4 book ai didi

java - DataStax API Cassandra 执行方法有时会返回空结果集

转载 作者:行者123 更新时间:2023-12-02 11:18:22 27 4
gpt4 key购买 nike

我正在使用 DataStax API 从 Cassandra 数据库读取记录,有时 session 中的执行方法显示奇怪的行为。有时会产生空结果集,有时会返回正确的结果集。

这是我的代码

    //Create session instance, using Singleton pattern
public synchronized static Static getSession(){
if(session !=null){
//Not sending all the clusters

Cluster cluster = Cluster.builder().withPort(myPort).addClusterPoints(clusters).withCredentials("username","password").
withSocketOptions(new SocketOptions().setReadTimeoutMillis(30000).setConnectTimeoutMillis(30000)).build();
session = cluster.connect("database");
}
else{
return session;
}
}

//get the session and execute query and return resultset
public void executeQuery(){

Session session = getSession();
BoundStatement boundStatement = ..
ResultSet result = session.execute(boundStatement);
System.out.println(result.isExhausted); // true
System.out.println(result.isFullyFetched); // true

System.out.println(result.all().size()); /// **0 sometimes, correct count sometimes**

}

由于某些原因,我没有发送 addClusterPoints 中的所有集群。它会产生任何问题吗?但我有时会收到数据

最佳答案

这可能取决于您的复制因子 (RF) 和集群的状态。如果 RF > 1,则默认 TokenAware/DCAware 策略将尝试从任何包含副本的节点获取数据。默认情况下,查询以一致性级别 LOCAL_ONE 执行 - 这意味着来自一个副本的答案就足够了,在这种情况下,所联系的副本可能没有您需要的数据.

如果其中一个副本离线的时间长于提示时间窗口的大小(默认为 3 小时),并且此后未执行修复,就会发生这种情况。要缓解该问题,请运行 nodetool repair (准确的建议取决于您的 DSE 版本 - 如果您正在使用它)。

关于java - DataStax API Cassandra 执行方法有时会返回空结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50107408/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com