最近、Graph DBチュートリアルをいくつか読んでください。それらのほとんどは、Graph DBとは何か、いつ構文を使用/フェッチするかを示しますが、GraphDBがデータを内部でどのように格納してデータをよりよく理解するかについての高レベルの説明はどこにもありません。
Javaバックグラウンドからの場合、GraphDBはJavaがオブジェクトグラフを表すのと同じようにデータを格納する必要があると思います。たとえば、Departmentには従業員のリストが含まれています。各部門独自のアドレスを持っています。
Department {
List<Employees> employees;
Address address;
}
グラフDBの観点から考えてみると、Departmentは、その従業員のメモリロケーションのリストを含むノードになります。
利点:-
一貫性:-従業員ノードに更新がある場合は常に、従業員のメモリ位置が含まれているだけなので、部門ノードで更新を行う必要はありません。
トラバーサルパフォーマンス:-従業員の参照が含まれているため、部門の従業員を取得するのは簡単です。したがって、結合やインデックスを使用する必要はありません。
これは、グラフDBがデータを高レベルで格納する方法ですか、それともストレージモデルを概念化してよりよく理解できますか?
答えは、使用しているグラフストアによって異なります。
Virtuosoは whitepaper でハイブリッドアプローチを説明しています
他のベンダーは、たとえば、ディスク上の タートル 表現と独自のメモリ表現を使用します(読み取り、方法はわかりません)。
本当に興味がある場合は、Apache Jenaの TDB実装 とそのソースコードを参照してください。
ノード、エッジ、プロパティを使用したセマンティッククエリにグラフ構造を使用してデータを表現および格納するデータベースは、GRAPH DATABASE
と呼ばれます。システムの主要な概念は、ストア内のデータ項目を直接関連付けるグラフ(またはエッジまたは関係)です。リレーションシップにより、ストア内のデータを直接リンクし、多くの場合、1つの操作で取得できます。
これは、データ間のリンクがデータに格納され、クエリがストア内でこのデータを検索し、結合の概念を使用して関連データを収集する従来のリレーショナルデータベースとは対照的です。グラフデータベースは、設計上、リレーショナルシステムでのモデル化が難しい複雑な階層構造を簡単かつ高速に取得できるようにします。
これはJVM
の上に書かれ、グラフ用にCompact storage
とMemory caching
を備えているため、中規模のハードウェア上の1つのデータベースで効率的なスケールアップと数十億のノードを実現できます。
このリンクにアクセスして、より明確なビューを取得できます: https://neo4j.com/developer/graph-database/