我使用嵌入式格式的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.convertException(CassandraThriftKeyColumnValueStore.java:263)

org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore.getNamesSlice(CassandraThriftKeyColumnValueStore.java:162)

org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore.getNamesSlice(CassandraThriftKeyColumnValueStore.java:105)

org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore.getSlice(CassandraThriftKeyColumnValueStore.java:94)

org.janusgraph.diskstorage.keycolumnvalue.KCVSProxy.getSlice(KCVSProxy.java:77)

org.janusgraph.diskstorage.keycolumnvalue.cache.ExpirationKCVSCache $ 2.call(ExpirationKCVSCache.java:100)

org.janusgraph.diskstorage.keycolumnvalue.cache.ExpirationKCVSCache $ 2.call(ExpirationKCVSCache.java:96)

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
org.apache.cassandra.thrift.Cassandra $ multiget_slice_result $ multiget_slice_resultStandardScheme.read(Cassandra.java:14696)在
org.apache.cassandra.thrift.Cassandra $ multiget_slice_result $ multiget_slice_resultStandardScheme.read(Cassandra.java:14633)在
org.apache.cassandra.thrift.Cassandra $ multiget_slice_result.read(Cassandra.java:14559)

org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)

org.apache.cassandra.thrift.Cassandra $ Client.recv_multiget_slice(Cassandra.java:741)

org.apache.cassandra.thrift.Cassandra $ Client.multiget_slice(Cassandra.java:725)

org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftKeyColumnValueStore.getNamesSlice(CassandraThriftKeyColumnValueStore.java:143)
...省略了58个通用框架


我在网上寻找了很多这样的帖子:

link1

但没有解决方案对我有用。关于如何解决这个问题的任何建议?

最佳答案

将存储后端更改为cql和与cql相关的其他属性为我解决了这个问题。
这是我使用的属性:

storage.backend=cql
storage.cql.keyspace=t_graph
storage.cql.read-consistency-level=ONE

10-04 22:47
查看更多