view paper/chapter1.tex @ 24:5316b4791570

Added master_paper.pdf
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Fri, 24 Jan 2014 11:14:24 +0900
parents 7df3a9a13b22
children 67880a2ca650
line wrap: on
line source

\chapter{既存の分散データベース}

% NoSQL の説明はどこかで必要。

\section{Cassandra}
Cassandra は2008年7月に Facebook によってオープンソースとして公開された Key-Value なデータベースである.
Amazon の Dynamo という分散キーバリューデータベースの影響を受けて作られている.
スキーマレスな NoSQL データベースになる.

Cassandra はサーバノードの配置にコンシステント・ハッシングアルゴリズムを用いる.
コンシステント・ハッシングによりノードは論理的にリング上に配置される.
リングには数値で表される位置がある.
データを書き込む際には, キーとなるハッシュ値に従いそのリングの位置から時計回りに近いサーバノードへと書き込まれる.
コンシステント・ハッシングを用いることで, ノードの数が増減した場合に, 再配置をしなくてもよいという利点がある.
データの偏りにより少数のサーバへの負荷が大きい場合に, 負荷が高いハッシュ値が指すリング上に
新たなノードを追加することで負荷を下げるといった手段もとれる.

1つのデータを最大どれだけ複製にとるかという
またデータの読み込み, 書き込みの際に Consistency Level を指定することができるのも Cassandra の特徴である.
データ取得の際に, いくつのノードに問い合わせを行うのか設定するのが Consistentcy Level である.
Consistency Level には ONE, QUORAM, ALL があり, それぞれ1つのノード, 全体のノードの過半数+1, 全体のノード
への処理を設定することができる.
Cassandra は高い可用性と分断耐性をもつ.

% Consistency Level を変更できるところ
\section{MongoDB}
MongoDB は2009年に公開された NoSQL のデータベースである.
JSON フォーマットのドキュメントデータベースであり, これはスキーマが無い
リレーショナルテーブルに例えられる.
スキーマが無いため, 事前にデータの定義を行う必要がない.
そのためリレーショナルデータベースに比べてデータの追加・削除
が行いやすい.

MongoDB は保存したデータを複数のサーバに複製をとる(replicate).
これはレプリケーション(replication)と呼ばれる.
また, 1つのサーバが全てのデータを持つのでなく, ある範囲の値を別々の
サーバに分割(シャード)させて保持する.
これをシャーディング(sharding)という.
MongoDB はレプリケーションとシャーディングにより分散データベースとして機能する.

% クエリ言語として JavaScript を採用しており, 演算子を自分作れるという利点を持つ.
% スペルミスに弱い

\section{Neo4j}
No4j は, グラフデータベースと呼ばれる NoSQL のデータベースである.
データをグラフとして保存する.
グラフはノードとリレーションシップにより表され, それぞれがプロパティを持つことができる.
リレーションシップはグラフでいうところのエッジにあたる.
ノードからリレーションシップを辿り, 各プロパティをみることでデータの取得を行うことができる.
通常データベースでは, データの取り出しに価の結合や条件の判定を行う.
だが, グラフデータベースグラフはどれだけデータが大きくなろうがノードからノードへの移動は1ステップですむ.
そのため, どれだけデータが大きくなろうと, データが小さい時と同じ計算量でデータの取得が行える.

Neo4j はマスターとスレーブの関係になるクラスタを構成することで分散データベースとして機能する.
マスターに書かれたデータはスレーブに書き込まれるが, すぐに全てのスレーブに書き込まれるわけではない.
したがってデータの整合性が失われる危険がある.
スレーブサーバは現在保持しているデータを返すことができる.
それにより高い読み取り性能の要求に答えることができる高可用性を実現している.