私は主に、「ArangoDB は真のグラフ データベースですか?」という質問をするつもりでした。
しかし、この質問はかなり不快に聞こえるでしょう。
triAGENS の皆さんは、「マルチパラダイム」データベースの作成において本当に素晴らしい仕事をしました。PostgreSQL、PostGIS、MongoDB、Neo4J/Titan のユーザーとして、「オールインワン」ソリューションを見て本当に感謝しています :)
基本的に ArangoDB でグラフを作成するには、2 つの個別のコレクションを作成する必要があります。1 つはエッジ用、もう 1 つは頂点用です。したがって、私が理解している限りでは、頂点と関連するエッジは「物理的に」隣接していないことをすでに意味しています。
さらに、適切なインデックスを作成した後でも、Gremlin でこの種のことを行うと、重大なパフォーマンスの問題に直面しています。
g.v('an_id').out('likes').in('likes').count()
〜3秒(知覚時間)後に結果を返す
Gremlin と Blueprint/ArangoDB がどのように機能するかをよく理解していなかったので、AQL を使用して同じクエリを書き直そうとしました。
LET lst = (FOR e1 in NEIGHBORS(vertices, edges, "an_id", "outbound", [ { "$label": "likes" } ] )
FOR e2 in NEIGHBORS(vertices, edges, e1.edge._to, "inbound", [ { "$label": "likes" } ] )
RETURN 1
)
RETURN length(lst)
これにより、同じ桁の遅延が発生します。
Titan または Neo4j データベースで (まったく同じデータを使用して) 同じクエリを実行しようとすると、クエリはすぐに返されます (知覚時間: <200ms)
したがって、ArangoDB のグラフ機能は「従来のドキュメント データベース」の上の「スマート グラフ レイヤー」ですが、ArangoDB は「ネイティブ」グラフ データベースではないように思えます。
この感覚を確認するために、データを変換して PostgreSQL にロードし、クエリを実行し (想定できるように複数のテーブル JOIN を使用)、同様の (ArangoDB との) 実行遅延が発生しました。
(AQL クエリで) 何か間違ったことをしましたか?
より良いトラバーサル時間を得るためにデータベースを最適化する方法はありますか?
PostgreSQL では、概念的にはエッジとノードを混在させ、CLUSTER 句を使用してデータを物理的に並べ替えますが、ArangoDB で同様のことができますか? (エッジとノードを「インターレース」する必要があるため、直感だけで難しいと思います)