Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
28
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@it__ssei

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
28
Help us understand the problem. What are the problem?