時間の複雑さは、通常、クエリ(クエリプランナの結果)の処理に依存するため、答えは単純ではありません。すべてのクエリ。
私はNeo4jについて話すことができます(免責事項:私はNeo4j従業員です)。
Neo4jのLuceneインデックスルックアップは、通常、インデックスで開始ノードを見つけるためにのみ実行され、クエリの実行時間の一部を表現するためにはあまり意味がありません。リレーションシップ・トラバーサルは、実際の違いが現れる場所である傾向があります。
開始ノードが見つかると、Neo4jは関係トラバーサルを通じてグラフを歩きます。ネオ4jでは、基本的にネイティブグラフdbsがリレーショナルdbsよりも優れている傾向があります。ポインタを追うコストはトラバーサルごとに一定です。
リレーショナルdbs(リレーショナルdbの上に構築されたグラフレイヤーを含む)の場合、関係トラバーサルは通常、独自の時間複雑度(O(1)ではなく)を持ち、 (特に自己/再帰結合)の数が増加します。
これにより、Neo4jのようなネイティブグラフデータベースは、接続されたデータ、特に些細でないまたは増加するリレーションシップトラバーサルでクエリを処理できるようになります(または、リーバビリティがない場合、 、 その他)。クエリのコストは、データベース内のノードの総数ではなく、クエリに触れられたグラフの部分に関連付けられているため、データベース内の最小のサブグラフにタッチするようにクエリを適切に制約できる場合に役立ちます。
リレーショナルデータベースとグラフデータベースのどちらを使用するかは、データの接続性と実行するクエリによって決まります。
グラフデータベースを決定した場合は、ネイティブと非ネイティブの両方の実装(Neo4jはネイティブグラフデータベースで、インデックスフリー(Neo4がACIDデータベースであるかどうか)、豊富で表現力豊かな照会言語が必要な場合(CypherはNeo4jの照会言語であるため、他の言語と比較して自由に比較することができます)。
詳細については、Why Graph Databases Outperfrom RDBMS on Connected DataのDZone記事、Neo4jのチーフサイエンティストJim WebberのExplaining Graph Databases to a Developerに関する記事をご覧ください。
も参照してください。関連性はありますが正確には一致しませんhttps://stackoverflow.com/questions/22821269/performance-of-arbitrary-queries-with-neo4j/22821528#22821528 – FrobberOfBits