私はグラフ データベースのシーンに不慣れで、Neo4j を調べて Cypher を学習しています。グラフ データベースをモデル化しようとしています。これはかなり単純なものです。ユーザーがいて、ムービーがあり、ユーザーはムービーを表示したり、ムービーを評価したりできます。プレイリストを作成し、プレイリストにはムービーを含めることができます。
質問は、スーパー ノードのパフォーマンスの問題に関するものです。そして、私が現在読んでいる非常に優れた本 - Learning Neo4j by Rik Van Bruggenから何かを引用します。
グラフの一部がすべて同じノードに接続されているデータセットでは、非常に興味深い問題が発生します。高密度ノードまたはスーパーノードとも呼ばれるこのノードは、グラフ トラバーサルの実際の問題になります。これは、グラフ データベース管理システムが、そのノードに接続されているすべての関係を評価して、次のステップを決定する必要があるためです。グラフトラバーサル。
本で提案されているこの問題の解決策は、100 の接続を持つメタ ノードを作成し、101 番目の接続を以前のメタ ノードにリンクされた新しいメタ ノードにリンクすることです。
公式の Neo4j ブログのブログ記事で、この問題は今後修正されると書かれているのを見ました (ブログ記事は 2013 年 1 月のものです) - http://neo4j.com/blog/2013-whats-coming-next- in-neo4j/
より正確には、彼らは次のように言っています。
「より大きなデータ」に関して計画しているもう 1 つのプロジェクトは、非常に多数 (数百万) の関係を持つ密に接続されたノード間のトラバーサルを処理するための特定の最適化を追加することです。(この問題は「スーパーノード」問題と呼ばれることもあります。)
この問題についてどう思いますか。メタ ノードのファンアウト パターンを使用する必要がありますか?それとも、すべてのチュートリアルで使用されているように見える基本的な関係を使用する必要がありますか? 他の提案はありますか?