第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では一つのノードに注目してその周囲を調べる
    • RDBのクエリはGlobalな検索、GraphDBのクエリはLocalな検索
  • 幅優先探索深さ優先探索がある
  • Stepと呼ばれる最小単位でグラフ探索の移動を表現する
  • GraphDBを使うためにはどのようなクエリを実行したいかが念頭にないと難しい
    • 特定のノードに着目した検索はGraphDBは得意
    • 条件を満たすノード全てを取得するような検索はGraphDBは得意ではない。こういうのはRDBの方が良い。
GraphDBと呼ばれる条件

RDBでも当然グラフ構造を格納することは出来る。では、GraphDBと呼ばれるためには何が必要か?-->Index-Free Adjacency

  • Index-Free Adjacency
    • Adjacencyの発音が難しいw
    • 全てのエレメントが自分の隣接のエレメントの情報を持っているという性質
    • DB的に言うとダイレクトポインタを全てのエレメントが持っている (Mini-Index)
    • 大規模グラフにおいて、インデックスツリーを参照するコストがバカにならないので、それを抑えられる。
    • GraphDBでは、Globalな検索はしないので
    • 辺やノードに与えられたプロパティについてはインデックスツリーを持っているが、ノードや辺の関係性を表現するためにはインデックスツリーを持っていない

ノードは内向きの辺、外向きの辺両方について情報を持っているので、自分に向かう辺も簡単に得られるらしい。

An Introduction to Neo4j (@doryokujin)

  • グラフ探索
    • 引数たくさんのメソッド呼び出し
    • メソッドチェーン
    • NeoなのでMatrixの人物相関図がグラフの例として使われることが多いw
  • Cypher
    • SQLライクな?グラフ探索用のDSL
    • 個人的には読みやすいとは思えなかった
    • 出てからまだ数ヶ月しか経っていない
  • その他機能
    • High Availability
    • Online backup
      • こちらも有償版のみ
    • Java Firstで開発されているが、ErlangPython, Ruby, Scalaなどから使うことが出来る。JVM言語はサポートされている感じ

An Introduction to Tinkerpop (@doryokujin)

各GraphDB固有のAPIに依存せずに統一的なGraphの操作を行うためのライブラリがTinkerPop

  • Blueprints
    • Graph DBに対する共通のAPIを提供している
    • ベンダーロックインを避けるのを目標として開発されている
    • RDBでのJDBCに相当するもの
    • TinkerGraphというLightweightなim-memoryのGraphDBがあり、ちょいと使うには便利
  • Pipes
    • フローを記述できる?よく分からなかった。。。
  • Gremlin
    • グラフ操作に特化したグラフ特化言語
    • GremlinはTinkerPopの真骨頂
    • 直感的な言語で対話的な操作が可能
  • reXster
    • REST APIを提供
    • InputはURI, OutputはJSON
    • The Dog Houseというウェブコンソールが提供されている

から構成される。

Enjoy Graph DB! (@bibrost)

この辺で追いつくのに力尽き。。。

次回

ミクシィさんで開催