グラフ型データベースとは
- データをグラフ構造に持つ
- データ間の関連性を管理
- 基本的な要素はノードとプロパティとリレーションシップ
- 大量データを高速処理
- RDB は join を利用し、コストをかけて検索するが、グラフ型データベースはリレーションシップを辿るから早い
インスタンスモデル
- グラフ型データベースを設計する上で重要
- 具体的なインスタンス(値を持ったオブジェクト)を作成しつつ、開発を進めていく
- ノードを作り、ノードにプロパティ(属性)をつけて、ノード間にリレーションシップを設定していく
グラフ型データベース
- Neo4j
- ハイパーグラフ
- 数学の集合でよく表される
- トリプル
- 主語(私は)、述語(通っていた)、目的語(大学)の3つを格納してデータを表す
グラフ型データベースの利用例
- EC サイト
- 商品のレコメンデーション
- SNS
- 友達の候補表示
- 通信機器の管理
- 機器の故障時、他の通信経路の確認や通信速度の確認
- 医療
- 患者、地域、症状、持病、性別、習慣、くせなどの情報を関連付けた分析や研究
- 道案内
- 最短経路の提示
Neo4j とは
- Neo Technology 社が開発したグラフ型データベース
- 2003年に設立
- 拠点はもともとスウェーデン。今はアメリカ(シリコンバレー)に拠点を移している
- 世界中で500サービス以上稼働し、グラフ型データベースの中では最も知名度が高い
- Google/Facebook などでも利用されている
- NoSQL
Neo4j の特徴
- ACID(原子性/一貫性/独立性/耐久性) 特性に準拠したデータベース
- NoSQL 系データベースだが、「ACID 特性」に準拠し、整合性を確保できる
- 高いパフォーマンス
- データベースが肥大化しても、処理速度の低下は少なく、1秒あたり数百のトランザクションを実行できる
- RDB の1000倍程のパフォーマンス
- Cypher Query
- RDB を操作する SQL 文と同様に、Neo4j を操作するクエリ言語
- CRUD 操作が可能
- ノードやリレーションのパターンマッチングを行う
- インデックスや制約を管理
- 慣れてしまえば、簡単に記述できる
- コード量は SQL と比べ、10倍〜100倍少なくすることができる
- 幅広い開発言語に対応
- Java/.NET/JavaScript/Python/Ruby/PHP/R/Go