search
LoginSignup
30
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Neo4j Advent Calendar 2016 Day 1

posted at

updated at

Graph DBとはなにか

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を使っている。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
30
Help us understand the problem. What are the problem?