如何更改Janusgraph客户端读取一致性



我是Janusgraph的新手,使用Cassandra作为后端数据库。我有一个查询,它使用查找节点的所有传入边。为此,我需要在Janusgraph配置中使读取一致性为ONE。我尝试了以下配置,但无法获得正确的读取一致性:

public static JanusGraph create() {
JanusGraphFactory.Builder config = JanusGraphFactory.build();
config.set("storage.backend", "cassandrathrift");
config.set("storage.cassandra.keyspace", "cs_graph");
config.set("storage.cassandra.read-consistency-level","ONE");
config.set("storage.cassandra.write-consistency-level","ONE");
config.set("storage.cassandra.frame-size-mb", "128");
config.set("storage.cassandra.thrift.cpool.max-wait", 360000);
config.set("storage.hostname", "10.XXX.1.XXX");
config.set("connectionPool.keepAliveInterval","360000");
config.set("storage.cql.only-use-local-consistency-for-system-operations","true");
graph = config.open();
System.out.println("Graph = "+graph);
traversalSource = graph.traversal();
System.out.println("traversalSource = "+traversalSource);
getAllEdges();
return graph;
}

然而,客户端仍然以QUORUM级别显示CassandraTransaction的一致性。

以下是日志:

16:40:54.799〔main〕调试o.j.d.cassandra.CassandraTransaction-已创建CassandraTransaction@25e2a451[读=法定人数,写=法定人数]16:40:54.800[主]调试o.j.d.cassandra.CassandraTransaction-已创建CassandraTransaction@1698ee84[读=法定人数,写=法定人数]全部edges=100000 16:40:55.5754[main]调试o.j.g.database.StandardJanusGraph-关闭图形使用关机挂钩的standardjanusgraph[casandrathrift:[10.70.1.167]]线程[线程-5,5,main]16:40:55.555[main]调试o.j.d.cassandra.CassandraTransaction-已创建CassandraTransaction@3e5499cc[读=法定人数,写=法定人数]16:40:55.5755[min]DEBUG o.j.d.cassandra.CassandraTransaction-已创建CassandraTransaction@67ab1c47[读=法定人数,写=法定人数]16:40:56.113[min]DEBUG o.j.d.cassandra.CassandraTransaction-已创建CassandraTransaction@6821ea29[读=法定人数,写=法定人数]16:40:56.542[min]DEBUG o.j.d.cassandra.CassandraTransaction-已创建CassandraTransaction@338494fa[读=法定人数,写=法定人数]16:40:56.909[min]INFO o.j.d.c.t.CassandraThriftStoreManager-Closed Thrift连接池。

关于如何将其更改为ONE或LOCAL一致性级别有什么建议吗??

首先,我会切换到通过CQL而不是Thrift连接。Thrift已经被弃用,所以它没有看到任何错误修复改进的好处。换句话说,如果它本身就坏了,就无法修复。所以你最好使用CQL。

config.set("storage.backend", "cql");
config.set("storage.cql.keyspace", "cs_graph");
storage.cql.read-consistency-level=ONE
storage.cql.write-consistency-level=ONE

其次,您需要确保始终使用存储后端的配置属性。不幸的是,JanusGraph和Cassandra很容易混淆。。。

config.set("storage.cassandra.read-consistency-level","ONE");
config.set("storage.cassandra.write-consistency-level","ONE");
....
config.set("storage.cql.only-use-local-consistency-for-system-operations","true");

在上面的示例中,您已经设置了storage.cassandra(Thrift(和storage.cql(CQL(配置的属性。

如果仍然不起作用,请尝试添加此设置:

log.tx.key-consistent=true

如果事务日志显示为QUORUM,则将其设置为密钥一致性将覆盖其默认的QUORUM一致性访问。

最新更新