Neo4j(グラフDB)

Neo4jに触る機会があったのでちょっと調べた事を書いておきます。

Neo4jとは
・Javaで記述されている
・スキーマレスでデータを登録できる
・データ間の関連を定義、登録できる
・データをCypherと呼ばれるSQLライクな言語で操作できます
・グラフ理論に基づいたデータベース
・関連定義、検索するのが得意

グラフてなんだ?
ノード(Vertices,節点,頂点)の集合とエッジ(edges,枝,辺)で構成され、関連をノードとエッジにより表現したものをグラフと言う,,,らしいです
エッジが向きを持たない場合は無向グラフ
エッジが向きを持つ場合は有効グラフと言われます

無向グラフ:Facebookのフレンド
有向グラフ:Twitterのフォロー
有向-無向グラフ

グラフDBてなんだ?
・グラフ構造を持ったDBはグラフDBと言えるのか
→そういう事では無いらしい
・なので、RDBでグラフ構造を定義してみる
rdb%e3%81%a7%e3%81%ae%e3%82%b0%e3%83%a9%e3%83%95
と、こんな感じになります(ちなみに、DocumentDBでも定義できます)
この場合、Aに隣接する要素(BまたはC)を取得する場合はインデックスツリーを参照しBを特定します
例の場合は単純なので想像しにくいのですが、Facebookの多くのユーザが存在するサービスで、友達の友達に特定の属性を持った人は何人いるか?などを調べる場合、かなりの時間が必要となるでしょう
・では、グラフDBだと
グラフDBでは要素(ノード、エッジ)が隣接する要素のポインタを直接持っています
なので、全体のデータ量が増えたとしても一定のコストで隣接要素を取得することができます
特定のルートノードを起点に関連をたどる事が効率的に行えるといえます

・グラフDBの苦手な事
要素全体に対する処理は苦手です

  • ノードの関連が10以上のノードを取得したい
  • データ全体の平均値を取得したい

まとめ
Neo4jじゃ無くてグラフDBについての記事だよね
関連を中心にデータを操作したいときには有効だよ
データ全体に対する操作は苦手だよ
あまりまとまりの無い文章だったね、、、

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です