私は今TitanDB + Cassandraをテストしています。このような グラフスキーマ:スピードアップする方法カッパドラでTitanDBの2ホップクエリ
VERTEX:USER(userId), IP(ip), SESSION_ID(sessionId), DEVICE(deviceId)
EDGE:USER->IP, USER->SESSION_ID, USER->DEVICE
データサイズ:頂点1億、エッジ:10億の インデックス:エッジのすべての種類の頂点中心のインデックス。 userId、ip、sessionId、およびdeviceIdのインデックス。
IP、DEVICE、およびSESSION_IDのための垂直パーティションを設定します。合計32パーティション。
カサンドラホスト:AWS EC2 I2(2xlage)x 24。 現在、すべてのホストは約30Gのデータを保持しています。
Usecase:userIdにedgeLabelを与え、このエッジのアウト頂点ですべての関連ユーザを見つけます。 例:g.V().has(T.label, 'USER').has('USER_ID', '12345').out('USER_IP').in().valueMap();
しかし、この種のクエリはかなり遅く、時には数百秒です。 1人のユーザが多くの関連するIP(数百人)を持つことができるので、これらのIPからは、たくさんのユーザ(数千人)も手に入れることができます。
バックエンドストレージのすべてのパーティションに対してこの種類のクエリをTitanに並列クエリしますか? 私は制限を使用してみてください:
g.V().has(T.label, 'USER').has('USER_ID', '12345').out('USER_IP').limit(50).in().limit(100).valueMap()
また、遅いです。私はこの種の質問が5秒でできることを願っています。 タイタンの限界()の仕組みは?すべての結果を最初に取得し、次に「制限」しますか?
パフォーマンスを向上させるにはどうすればよいですか?誰も助言を与えることができますか?