3

2 つのデータ セットに対して TitanGraph DB のエッジ全体でグラフ集計 (groupBy、groupCount) クエリを実行することを検討しています。

  1. 約 10,000 のノードと約 100 万のエッジ

  2. 約 20 万のノードと約 10 億のエッジ

このタイプのグレムリンクエリを1分以内に実行できるようにするには、Faunusをインストールするためにどの時点で努力する必要があるかを誰かが知っていますか?

4

1 に答える 1

5

10000 ノードと 1M エッジでは、プレーンな Gremlin (Faunus なし) で問題は発生しないはずです。Furnace を使用してほぼそのサイズのグラフを生成する以下のコードを参照してください。

gremlin>  g = TitanFactory.open('/tmp/titan/generated')
==>titangraph[local:/tmp/titan/generated]
gremlin> import com.tinkerpop.furnace.generators.*
==>import com.tinkerpop.gremlin.*
==>import com.tinkerpop.gremlin.java.*
...
==>import com.tinkerpop.furnace.generators.*
gremlin> for (int i=0;i<10000;i++) g.addVertex(i)
==>null
gremlin> r = new java.util.Random()
==>java.util.Random@137f0ced
gremlin> generator = new DistributionGenerator("knows", { it.setProperty("weight", r.nextInt(100)) } as EdgeAnnotator)
==>com.tinkerpop.furnace.generators.DistributionGenerator@111a3ce4
gremlin> generator.setOutDistribution(new PowerLawDistribution(2.1))
==>null
gremlin> generator.generate(g,1000000)
==>1042671

ここで集計に関する投稿を思い出してください。基本的に、このデータセットに対して同じクエリを実行します。

gremlin> start=System.currentTimeMillis();g.E.groupBy{it.getProperty("weight")}{it}.cap.next();System.currentTimeMillis()-start
==>1415
gremlin> m.size()
==>100

ご覧のとおり、この走査には約 1.5 秒かかります (すべてメモリ内にある TinkerGraph では約 500 ミリ秒です)。

1B エッジでは、Faunus が必要になる可能性があります。何らかの形ですべてをメモリに収めることができたとしても、これらすべてのエッジの反復を 1 分以内に完了するとは思いません。Faunus では、1 分間のクエリ/応答時間が得られない場合があることに注意してください。少し実験する必要があると思います。

于 2013-11-29T13:23:38.953 に答える