在我的系统中,我要求节点上的边数必须存储为顶点上的内部属性,以及特定的传出边上以顶点为中心的索引。这自然要求我在所有数据加载完成后,计算节点上的边缘数。我这样做如下:
long edgeCount = graph.getGraph().traversal().V(vertexId).bothE().count().next();但是,当我将测试扩展到某些节点是“超级”节点时,我会在上面的一行中得到以下异常:
Caused by: com.netflix.astyanax.connectionpool.exceptions.TransportException: TransportException: [host=127.0.0.1(127.0.0.1):9160, latency=4792(4792), attempts=1]org.apache.thrift.transport.TTransportException: Frame size (70936735) larger than max length (62914560)!
at com.netflix.astyanax.thrift.ThriftConverter.ToConnectionPoolException(ThriftConverter.java:197) ~[astyanax-thrift-3.8.0.jar!/:3.8.0]
at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:65) ~[astyanax-thrift-3.8.0.jar!/:3.8.0]
at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:28) ~[astyanax-thrift-3.8.0.jar!/:3.8.0]
at com.netflix.astyanax.thrift.ThriftSyncConnectionFactoryImpl$ThriftConnection.execute(ThriftSyncConnectionFactoryImpl.java:153) ~[astyanax-thrift-3.8.0.jar!/:3.8.0]
at com.netflix.astyanax.connectionpool.impl.AbstractExecuteWithFailoverImpl.tryOperation(AbstractExecuteWithFailoverImpl.java:119) ~[astyanax-core-3.8.0.jar!/:3.8.0]
at com.netflix.astyanax.connectionpool.impl.AbstractHostPartitionConnectionPool.executeWithFailover(AbstractHostPartitionConnectionPool.java:352) ~[astyanax-core-3.8.0.jar!/:3.8.0]
at com.netflix.astyanax.thrift.ThriftColumnFamilyQueryImpl$4.execute(ThriftColumnFamilyQueryImpl.java:538) ~[astyanax-thrift-3.8.0.jar!/:3.8.0]
at com.thinkaurelius.titan.diskstorage.cassandra.astyanax.AstyanaxKeyColumnValueStore.getNamesSlice(AstyanaxKeyColumnValueStore.java:112) ~[titan-cassandra-1.0.0.jar!/:na]解决这个问题的最好方法是什么?我应该简单地增加帧大小,还是有更好的方法来计算节点上的边数?
发布于 2016-03-28 15:34:26
是的,你需要增加帧大小。当您有一个超级节点时,需要从存储后端读取一个非常大的行,这在OLAP中甚至是正确的。我同意,如果您计划在图中的每个顶点上计算这个值,这最好作为OLAP操作来完成。
在这个泰坦邮件列表线程中可以找到这个和其他一些好的提示。请记住,链接是非常古老的,所以这些概念仍然有效,但是一些Titan配置属性的名称可能有所不同。
发布于 2016-03-28 05:20:26
这样的任务本质上是OLAP,应该使用分布式系统来执行,而不是使用遍历。
在GraphComputer中有一个名为TinkerPop 3的概念,它可以用来执行这样的任务。
它基本上允许您运行Gremlin查询,这些查询将在多台机器上进行评估。
例如,可以使用SparkGraphComputer在阿帕奇火花之上运行查询。
https://stackoverflow.com/questions/36195697
复制相似问题