2016-03-24 6 views
6

私のシステムでは、ノード上のエッジの数を、特定の出力エッジの頂点中心のインデックスだけでなく、頂点の内部プロパティとして保存する必要があります。これは当然、すべてのデータのロードが完了した後、ノードのエッジ数をカウントする必要があります。次のように私はそう:Titan上でスーパーノードを数える

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] 

これを解決する最善の方法は何ですか?単純にフレームのサイズを大きくするか、ノードのエッジ数を数える方法がありますか?

答えて

3

はい、フレームサイズを大きくする必要があります。スーパーノードを使用すると、ストレージバックエンドから読み取る必要がある非常に大きな行があります。これはOLAPの場合でも当てはまります。私はグラフのすべての頂点でこれを計算しようと考えているなら、これはOLAP操作として最もうまくいくことに同意します。

これと他のいくつかのヒントは、Titan mailing list threadにあります。リンクはかなり古いので、コンセプトはまだ有効ですが、Titan構成プロパティ名の一部は異なる可能性があります。

+0

これは、Gremlin-Hadoopの統合を検討する必要があることを意味しますか? –

3

このようなタスクは、本質的にOLAPであるため、トラバーサルを使用せずに分散システムを使用して実行する必要があります。

TinkerPop 3にはGraphComputerという概念があり、これを使用してこのようなタスクを実行できます。

これは、基本的に、複数のマシンで評価されるGremlinクエリを実行することを可能にします。

たとえば、SparkGraphComputerを使用して、Apache Sparkの上にクエリを実行できます。

関連する問題