第1回GraphDB勉強会に参加してきた
10/7にフューチャーアーキテクトさんで開催された、第1回GraphDB勉強会に参加してきた。
この手の勉強会には、今のところ完全に聞く側だけの参加で何のコントリビューションも出来ていないので、運営側の人には感謝しっぱなし。ありがとうございます。
資料とTogetterは@bibrostさんがまとめてくれている模様。
http://graphdb.jp/2011/10/51/
それにしても、@doryokujinさんは3セッション=3時間の話のネタを用意して実際に発表するのだから凄いなと。それでいて、私よりも何歳も若いと来ているのだから、自分のコンピテンシーについて考えさせられてしまう。
The Definition of GraphDB (@doryokujin)
グラフって何かという話。棒グラフとかのグラフではなく、グラフ理論のグラフ。頂点とそれらを結ぶ辺から構成される。
グラフの種類
- 有向グラフとか無向グラフがあるけれども、無向辺は2つの有向辺に変換可能なので全部有向グラフとして扱う
- Single-Relational Graph
- 全部の頂点と辺のタイプが単一のグラフ
- Multi-Relational Graph
- 辺のタイプが単一ではない
- 頂点のタイプも単一ではない
いろいろなGraphDBで共通のグラフモデルとして扱われているのはProperty Graphと呼ばれる種類のグラフ。Multi-Relational Graphの頂点や辺にKey-Valueで表現されるプロパティを持つグラフをProperty Graphと呼ぶらしい。
Hyper Graphというグラフの種類を採用したGraphDBもあるらしい。
グラフの探索
GraphDBと呼ばれる条件
RDBでも当然グラフ構造を格納することは出来る。では、GraphDBと呼ばれるためには何が必要か?-->Index-Free Adjacency
- Index-Free Adjacency
- Adjacencyの発音が難しいw
- 全てのエレメントが自分の隣接のエレメントの情報を持っているという性質
- DB的に言うとダイレクトポインタを全てのエレメントが持っている (Mini-Index)
- 大規模グラフにおいて、インデックスツリーを参照するコストがバカにならないので、それを抑えられる。
- GraphDBでは、Globalな検索はしないので
- 辺やノードに与えられたプロパティについてはインデックスツリーを持っているが、ノードや辺の関係性を表現するためにはインデックスツリーを持っていない
ノードは内向きの辺、外向きの辺両方について情報を持っているので、自分に向かう辺も簡単に得られるらしい。
An Introduction to Neo4j (@doryokujin)
- Neo4j
- グラフ探索
- 引数たくさんのメソッド呼び出し
- メソッドチェーン
- NeoなのでMatrixの人物相関図がグラフの例として使われることが多いw
An Introduction to Tinkerpop (@doryokujin)
各GraphDB固有のAPIに依存せずに統一的なGraphの操作を行うためのライブラリがTinkerPop
- Blueprints
- Pipes
- フローを記述できる?よく分からなかった。。。
- Gremlin
- グラフ操作に特化したグラフ特化言語
- GremlinはTinkerPopの真骨頂
- 直感的な言語で対話的な操作が可能
- reXster
から構成される。
Enjoy Graph DB! (@bibrost)
この辺で追いつくのに力尽き。。。
次回
ミクシィさんで開催