Graph DBとはなにか

  • 8
    Like
  • 0
    Comment

TL;DR

つながり方に注目するためのDB。

数多のDBの中での位置づけ

SQL

分類 データモデル/種別 実装例
RDB Relational Model MySQL

NoSQL

種別 実装例
Column HBase
Document MongoDB
Key-value Redis
Graph Neo4j
Multi-model Couchbase

参考:
「Database」https://en.wikipedia.org/wiki/Database#Models
「NoSQL」https://en.wikipedia.org/wiki/NoSQL#Types_and_examples_of_NoSQL_databases

なぜGraphが必要なのか

RDBは大規模データに向かない

  • テーブル間結合が遅い
  • レコード数が増えると、検索に掛かる時間と難易度が増大する
    • メモリ枯渇の危険性
    • ディスクのスワップ枯渇の危険性
    • ディスクI/Oの限界
    • テーブルを上手く正規化しないとロック地獄になる
    • etc...

参考:
「集計はRDBばかりに頑張らせるのをやめると幸せになれる。」 http://qiita.com/taruhachi/items/496d217ed2338239f0d2

Graph DBの長所と短所

長所

  • ACID特性が担保されている
  • オブジェクト間の関連づけを簡単に表現できる
  • 検索が局所的なのでスケールしやすい

短所

  • 全体から検索するのは苦手

参考:
「GraphDB徹底入門」http://www.slideshare.net/doryokujin/graphdbgraphdb
「The ACID Consistency Model」https://neo4j.com/blog/acid-vs-base-consistency-models-explained/

Graph DBの使いどころ

  • 最短経路探索
  • グラフの一部を抜き出す

Graph DBの成り立ち

Property Graph model

  • ノード
    • プロパティを持つ
  • リレーション(エッジ)
    • プロパティを持つ
    • 関係の向きを持つ
  • プロパティ
    • key-value型のデータ

参考:
「RDBとグラフDBは使いよう」http://lab.adn-mobasia.net/?p=3817

Query Language

Neo4jの場合はCypherを使っている。

This post is the No.1 article of Neo4j Advent Calendar 2016