グラフの概念
ここでいうグラフとは、数学のグラフ理論でいうグラフをさし、棒グラフや折れ線グラフ、円グラフなどではありません。
グラフ理論でいうグラフとは、ノードの集合とエッジの集合で構成されるものを指し、例えば、7つのノードと8本のエッジからなるグラフは下記のようなものとなります。
グラフの問題
日常的な問題や工学的問題の多くをグラフで考えることが出来ます。
- 人間関係
- 会社関係
- 組織図
- 取引関係
- 電気回路
- 配管図
- ネットワーク構成
- 購買履歴
- 家系図
- フローチャート図
- ナレッジ
また、これらの複数を一つのグラフ上に表すことにより新たな価値を引き出せます。
- ネットワーク構成のグラフに顧客サービスグラフを載せることにより、故障発生時に影響が及ぶ顧客の特定
- 業界地図と最新ニュースを合わせることにより、コンペティターのサプライヤーが倒産した場合など自社への影響を予見
- 原材料や工程を一つのグラフで管理することにより、事象が発生した場合に影響の及ぶ範囲を素早く特定
ラベル付きプロパティ・グラフ・モデル
Neo4jでは、グラフをさらに、以下に説明する「ラベル付きプロパティ・グラフ・モデル」に発展させています。以下がラベル付きプロパティ・グラフ・モデルの構成要素です。
ノード
- ノードは主要なデータ要素です
- ノードはリレーションシップ(=関係性)を介して他のノードと接続されます
- ノードは、プロパティ(キー/バリュー・ペアとして格納される属性)を保持可能
- ノードには、(グラフ内での役割を説明する)ラベルを付与可能
リレーションシップ
- 2つのノードをリレーションシップ(Relationship)で結びます
- リレーションシップは方向性があります(有向グラフ)
- 1つのノードに複数のリレーションシップを持たせられます
- リレーションシップは、複数のプロパティ(キー/バリュー・ペアとして格納される属性)を保持可能
プロパティ
- プロパティは名前(またはキー)を文字列とした名前付きの値です
- プロパティはインデックスが付与され、制約条件を付与することも可能です
- 複数のプロパティから複合インデックスを作成できます
ラベル
- ラベルにより、ノードをグループ化します
- 1ノードに対して、複数のラベルの付与が可能です。
- ラベルはインデックス化され、グラフ中のノード検索を高速化します
- Neo4j独自のラベルのインデックス化技術は、スピードの最高速化します
つまり、上記の例では:
ANNやDANはそれぞれノードを構成します。
ANNというノードとDANというノードには”Person”というラベルが付与されています。
DANはname、born、twitterというプロパティを持ち、その値は、それぞれ”Dan”、”May 29,1970″、”@dan”です。
ANNというノードとDANというノードには”Person”というラベルが付与されています。
DANとANNは、”Is_Married_To”というリレーションシップと”Lives_With”というリレーションシップで結ばれています。
ということです。