java - Janusgraph:Cassandra 节俭超时异常
问题描述
我正在使用嵌入式格式的 Janusgraph,后端为 cassandrathrift。这是我对 janusgraph 和 cassandra 的属性:
storage.backend=cassandrathrift
storage.cassandra.keyspace=t_graph
storage.cassandra.frame-size-mb=128
storage.hostname=10.XX.XX.XX,20.XX.XX.XX,30.XX.XX.XX
我有一个查询,可以找出特定顶点的追随者数量。这是代码:
public class FollowCountNormal {
private static JanusGraph graph;
private static GraphTraversalSource traversalSource;
public static void main(String[] args) {
create();
System.exit(0);
}
public static JanusGraph create() {
graph = JanusGraphFactory.open("/resources/jp.properties");
traversalSource = graph.traversal();
getAllEdges();
return graph;
}
static long getAllEdges(){
try{
GraphTraversal<Vertex, Vertex> allV = traversalSource.V();
GraphTraversal<Vertex, Vertex> gt = allV.has("vid", "supernode");
GraphTraversal<Vertex, Long> c = gt.inE()
.count();
long l = c.next();
System.out.println("All edges = "+l);
graph.tx().commit();
return l;
}catch (Exception e) {
System.out.println("Error while fetching the edges for : ");
e.printStackTrace();
}
return -1;
}
}
如果顶点具有有限数量的传入边,则此代码工作正常(即工作正常是追随者计数小于 100000)。但是,如果追随者人数以百万计,我得到以下异常:
原因:org.janusgraph.diskstorage.PermanentBackendException:org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore 的 org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore.convertException(CassandraThriftKeyColumnValueStore.java:263) 的存储后端永久失败。 getNamesSlice(CassandraThriftKeyColumnValueStore.java:162) at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore.getNamesSlice(CassandraThriftKeyColumnValueStore.java:105) at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore.getSlice(CassandraThriftKeyColumnValueStore.java:在 org.janusgraph.diskstorage.keycolumnvalue.KCVSProxy.getSlice(KCVSProxy.java:77) 在 org.janusgraph.diskstorage.keycolumnvalue.cache.ExpirationKCVSCache$2。在 com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java: 4742) 在 com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) 在 com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319) ... 50 个常用帧省略原因:org.apache.cassandra.thrift.TimedOutException: null at org.apache.cassandra.thrift.Cassandra$multiget_slice_result$multiget_slice_resultStandardScheme.read(Cassandra.java:14696) at org.apache.cassandra.thrift.Cassandra$multiget_slice_result $multiget_slice_resultStandardScheme.read(Cassandra.java:14633) 在 org.apache.cassandra.thrift.Cassandra$multiget_slice_result。在 org.apache.cassandra.thrift.Cassandra$Client.recv_multiget_slice(Cassandra.java:741) 的 org.apache.cassandra.thrift.Cassandra 的 org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78) 读取(Cassandra.java:14559) .cassandra.thrift.Cassandra$Client.multiget_slice(Cassandra.java:725) at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore.getNamesSlice(CassandraThriftKeyColumnValueStore.java:143) ... 省略了 58 个常用帧getNamesSlice(CassandraThriftKeyColumnValueStore.java:143) ... 58个常用帧省略getNamesSlice(CassandraThriftKeyColumnValueStore.java:143) ... 58个常用帧省略
我在网上找了很多这样的帖子:
但没有解决方案对我有用。关于如何解决这个问题的任何建议?
解决方案
将存储后端更改为 cql 和其他与 cql 相关的属性为我解决了这个问题。这是我使用的属性:
storage.backend=cql
storage.cql.keyspace=t_graph
storage.cql.read-consistency-level=ONE
推荐阅读
- google-sheets - 平均英尺/英寸的最简单和最准确的方法是什么?
- django - 使用 Stripe webhook 时无法连接到远程主机
- node.js - 使用 react js 的构建生产文件时从节点 js 检索图像的问题
- clockify - 创建/放置项目 API 似乎不适用于所有属性
- tensorflow - TensorFlow 系统日志
- java - 按下子按钮时如何刷新android中的片段布局?
- postgresql - 如何使用 Panache 和 Hibernate 从 postgresql 中的 jsonb 获取属性值?
- javascript - 如何使用 jest 为 redisClient 错误编写测试
- r - R:如何将 3 个单独的数值变量转换为一个变量的 3 个级别?
- flutter - 运行调试时VSCode中的多个调用堆栈主线程