diff paper/chapter1.tex @ 26:388cd4555b3d

Added neo4j_replica, mongodb_sharding and cassandra_ring
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Sun, 26 Jan 2014 00:16:38 +0900
parents 67880a2ca650
children 1abd3c17cff9
line wrap: on
line diff
--- a/paper/chapter1.tex	Sat Jan 25 22:24:03 2014 +0900
+++ b/paper/chapter1.tex	Sun Jan 26 00:16:38 2014 +0900
@@ -4,19 +4,38 @@
 % データベースはなんなのかをいれないと。
 % NoSQL の説明も必要。
 
-この章ではまずデータベースの種類である RDB と NoSQL について述べる.
+本章ではまずデータベースの種類である RDB と NoSQL について述べる.
 その次に, 既存の NoSQL データベースとして Cassandra, MongoDB, Neo4j について述べる.
 
 \section{RDB と NoSQL}
 データベースは大別すると RDB と NoSQL に分けられる.
-RDB とは関係と関係の属性により表されるスキーマをデータ構造に持つデータベースである.
-データベースアクセス言語として SQL 言語を持つ RDB は一台の PC でデータを扱う分には最適である.
+RDB とは行と列からなる2次元のテーブルによりデータを保持するデータベースである.
+RDB はデータベースアクセス言語として SQL 言語を持ち, 一台のマシンでデータを扱う分には最適である.
 しかし, RDB はマシン単体以上の処理性能をだすことができない.
 そこで, 汎用的な PC をいくつも用意しデータや処理を分散して管理できるデータベースが求められた.
 それらのデータベースは NoSQL(Not Only SQL) と呼ばれる.
+2次元のテーブルでは無く, Key-Value, ドキュメント, グラフといった表現形式でデータの保持を行う.
 NoSQL は, SQL を使用するデータベースには向いていない処理を行うことを目的にしている.
 
-分散データベースは, NoSQL に分けられる.
+% 分散データベースは, NoSQL に分けられる.
+
+\section{CAP 定理}
+分散データシステムにおいて次の3つを同時に保証することはできない
+\begin{itemize}
+\item 一貫性(Consistency)
+全てのノードはクエリが同じならば同じデータを返す.
+\item 可用性(Availability)
+あるノードに障害が発生しても機能しているノードにより常にデータの読み書きが行える. 
+\item 分断耐性(Partition-tolerance)
+ネットワーク障害によりノードの接続が切れてもデータベースは機能し続けることができる.
+\end{itemize}
+これは CAP 定理\cite{cap}と呼ばれる.
+利用するデータベース選ぶ場合, この CAP 定理を意識しなければならない.
+一貫性と可用性を重視したい場合はRDB になる.
+分断耐性を必要とする場合は NoSQL データベースとなる.
+だが NoSQL においても, 一貫性か可用性のどちらを保証しているかで用途が変わってくる.
+
+分散データシステムを考える場合は, この CAP 定理を意識していなければならない.
 
 
 \section{Cassandra}
@@ -42,6 +61,15 @@
 
 % keyspace, super column といったデータの表現についても述べるべきか?
 % レプリケーションファクタはkeyspace毎に設定できる
+\begin{figure}[htpb]
+  \begin{center}
+    \includegraphics[scale=0.7]{figures/cassandra_ring.pdf}
+    \caption{コンシステンシー・ハッシング}
+    \label{fig:cassandra_ring}
+  \end{center}
+\end{figure}
+
+\newpage
 
 \section{MongoDB}
 MongoDB は2009年に公開された NoSQL のデータベースである.
@@ -51,18 +79,28 @@
 そのためリレーショナルデータベースに比べてデータの追加・削除
 が行いやすい.
 
-MongoDB は保存したデータを複数のサーバに複製をとる(replicate).
+MongoDB は保存したデータを複数のサーバに複製をとる.
 これはレプリケーション(replication)と呼ばれる.
 また, 1つのサーバが全てのデータを持つのでなく, ある範囲の値を別々の
 サーバに分割(シャード)させて保持する.
 これをシャーディング(sharding)という.
-MongoDB はレプリケーションとシャーディングにより分散データベースとして機能する.
+MongoDB はレプリケーションとシャーディングにより分断耐性と一貫性を持つ.
 
 % クエリ言語として JavaScript を採用しており, 演算子を自分作れるという利点を持つ.
 % スペルミスに弱い
 
+\begin{figure}[htpb]
+  \begin{center}
+    \includegraphics[scale=0.7]{figures/mongodb_sharding.pdf}
+    \caption{シャーディング}
+    \label{fig:mongodb_sharding}
+  \end{center}
+\end{figure}
+
+\newpage
+
 \section{Neo4j}
-No4j は, グラフデータベースと呼ばれる NoSQL のデータベースである.
+Neo4j は, グラフデータベースと呼ばれる NoSQL のデータベースである.
 データをグラフとして保存する.
 グラフはノードとリレーションシップにより表され, それぞれがプロパティを持つことができる.
 リレーションシップはグラフでいうところのエッジにあたる.
@@ -75,4 +113,21 @@
 マスターに書かれたデータはスレーブに書き込まれるが, すぐに全てのスレーブに書き込まれるわけではない.
 したがってデータの整合性が失われる危険がある.
 スレーブサーバは現在保持しているデータを返すことができる.
-それにより高い読み取り性能の要求に答えることができる高可用性を実現している.
+そのため Neo4j は高い読み取り性能の要求に答えることができる可用性と分断耐性を持つ.
+
+\begin{figure}[htpb]
+  \begin{center}
+    \includegraphics[scale=0.7]{figures/neo4j_replica.pdf}
+    \caption{Neo4j のクラスタ}
+    \label{fig:neo4j_replica}
+  \end{center}
+\end{figure}
+
+
+
+
+
+
+
+
+