Mercurial > hg > Papers > 2014 > nobuyasu-master
annotate paper/chapter1.tex @ 50:faa708c2958b
Added log
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 31 Jan 2014 17:13:59 +0900 |
parents | 63eca978482f |
children | 39c2180b5719 |
rev | line source |
---|---|
4
d42d2acf5d1d
Added some tex files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1 \chapter{既存の分散データベース} |
25
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
2 % 分散データベースとはなんなのか。 |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
3 % データベースはなんなのかをいれないと。 |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
4 % NoSQL の説明も必要。 |
38
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
31
diff
changeset
|
5 本章ではまずデータベースの種類であるリレーショナルデータベース(RDB) と NoSQL について述べる. |
559589aec976
Writed how to use alice topology manager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
31
diff
changeset
|
6 次に, 分散データシステムにおいて重要な CAP 定理について触れる. |
27
1abd3c17cff9
Added tree_conflict figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
26
diff
changeset
|
7 最後に既存の NoSQL データベースとして Cassandra, MongoDB, Neo4j の特徴について述べる. |
25
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
8 |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
9 \section{RDB と NoSQL} |
50 | 10 データベースは大別するとRDBとNoSQLに分けられる. |
11 RDBとは行と列からなる2次元のテーブルによりデータを保持するデータベースである. | |
12 RDBはデータベースアクセス言語としてSQL言語を持ち, 一台のマシンでデータを扱う分には最適である. | |
25
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
13 しかし, RDB はマシン単体以上の処理性能をだすことができない. |
50 | 14 そこで, 汎用的なPCをいくつも用意しデータや処理を分散して管理できるデータベースが求められた. |
15 それらのデータベースはNoSQL(Not Only SQL) と呼ばれSQLを使用しないデータベースのことを指す. | |
26
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
16 2次元のテーブルでは無く, Key-Value, ドキュメント, グラフといった表現形式でデータの保持を行う. |
50 | 17 NoSQLは, RDBには向いていない処理を行うことを目的にしている. |
25
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
18 |
26
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
19 % 分散データベースは, NoSQL に分けられる. |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
20 |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
21 \section{CAP 定理} |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
22 分散データシステムにおいて次の3つを同時に保証することはできない |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
23 \begin{itemize} |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
24 \item 一貫性(Consistency) |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
25 全てのノードはクエリが同じならば同じデータを返す. |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
26 \item 可用性(Availability) |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
27 あるノードに障害が発生しても機能しているノードにより常にデータの読み書きが行える. |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
28 \item 分断耐性(Partition-tolerance) |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
29 ネットワーク障害によりノードの接続が切れてもデータベースは機能し続けることができる. |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
30 \end{itemize} |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
31 これは CAP 定理\cite{cap}と呼ばれる. |
50 | 32 利用するデータベース選ぶ場合, このCAP定理を意識しなければならない. |
33 一貫性と可用性を重視したデータベースが, RDBである. | |
26
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
34 分断耐性を必要とする場合は NoSQL データベースとなる. |
50 | 35 そしてNoSQLの場合, 分断耐性と後もう一つ, 一貫性か可用性のどちらを保証しているかで用途が変わってくる. |
26
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
36 |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
37 分散データシステムを考える場合は, この CAP 定理を意識していなければならない. |
25
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
38 |
13 | 39 |
40 \section{Cassandra} | |
50 | 41 Cassandra\cite{cassandra} は2008年7月にFacebookによってオープンソースとして公開された Key-Value なデータベースである. |
42 AmazonのDynamo\cite{dynamo} という分散Key-Valueデータベースの影響を受けて作られている. | |
15
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
43 スキーマレスな NoSQL データベースになる. |
13 | 44 |
50 | 45 Cassandraはサーバノードの配置にConsistent hashingアルゴリズムを用いる. |
46 Consistent hashingによりノードは論理的にリング上に配置される. | |
15
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
47 リングには数値で表される位置がある. |
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
48 データを書き込む際には, キーとなるハッシュ値に従いそのリングの位置から時計回りに近いサーバノードへと書き込まれる. |
50 | 49 Consistent hashingを用いることで, ノードの数が増減した場合に, 再配置をしなくてもよいという利点がある. |
15
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
50 データの偏りにより少数のサーバへの負荷が大きい場合に, 負荷が高いハッシュ値が指すリング上に |
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
51 新たなノードを追加することで負荷を下げるといった手段もとれる. |
13 | 52 |
50 | 53 データを最大どれだけ配置するかを示すReplication factorと, データの読み書きをいくつのノードから |
54 行うのかを決めるConsistencyレベルを設定できる. | |
55 Consistencyレベルには主に ONE, QUORAM, ALL がある. | |
56 Replication factorの数値を N とした場合, ONE は1つのノード, QUORUM は N/2 + 1 のノード, ALL は N のノード | |
25
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
57 へと読み書きを行う. |
50 | 58 Consistencyハッシング, Replication factorとConsistencyレベルの設定により Cassandra は |
25
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
59 高い可用性と分断耐性を持つ. |
15
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
60 |
25
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
61 % keyspace, super column といったデータの表現についても述べるべきか? |
50 | 62 % Replication factorはkeyspace毎に設定できる |
26
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
63 \begin{figure}[htpb] |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
64 \begin{center} |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
65 \includegraphics[scale=0.7]{figures/cassandra_ring.pdf} |
50 | 66 \caption{Consistency・ハッシング} |
26
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
67 \label{fig:cassandra_ring} |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
68 \end{center} |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
69 \end{figure} |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
70 |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
71 \newpage |
25
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
72 |
13 | 73 \section{MongoDB} |
74 MongoDB は2009年に公開された NoSQL のデータベースである. | |
15
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
75 JSON フォーマットのドキュメントデータベースであり, これはスキーマが無い |
13 | 76 リレーショナルテーブルに例えられる. |
77 スキーマが無いため, 事前にデータの定義を行う必要がない. | |
78 そのためリレーショナルデータベースに比べてデータの追加・削除 | |
79 が行いやすい. | |
80 | |
26
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
81 MongoDB は保存したデータを複数のサーバに複製をとる. |
13 | 82 これはレプリケーション(replication)と呼ばれる. |
83 また, 1つのサーバが全てのデータを持つのでなく, ある範囲の値を別々の | |
27
1abd3c17cff9
Added tree_conflict figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
26
diff
changeset
|
84 サーバに分割させて保持する. |
50 | 85 これをShardingという. |
86 MongoDB はレプリケーションとShardingにより分断耐性と一貫性を持つ. | |
13 | 87 |
88 % クエリ言語として JavaScript を採用しており, 演算子を自分作れるという利点を持つ. | |
89 % スペルミスに弱い | |
14 | 90 |
26
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
91 \begin{figure}[htpb] |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
92 \begin{center} |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
93 \includegraphics[scale=0.7]{figures/mongodb_sharding.pdf} |
50 | 94 \caption{Sharding} |
26
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
95 \label{fig:mongodb_sharding} |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
96 \end{center} |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
97 \end{figure} |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
98 |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
99 \newpage |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
100 |
14 | 101 \section{Neo4j} |
26
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
102 Neo4j は, グラフデータベースと呼ばれる NoSQL のデータベースである. |
14 | 103 データをグラフとして保存する. |
104 グラフはノードとリレーションシップにより表され, それぞれがプロパティを持つことができる. | |
105 リレーションシップはグラフでいうところのエッジにあたる. | |
106 ノードからリレーションシップを辿り, 各プロパティをみることでデータの取得を行うことができる. | |
107 通常データベースでは, データの取り出しに価の結合や条件の判定を行う. | |
108 だが, グラフデータベースグラフはどれだけデータが大きくなろうがノードからノードへの移動は1ステップですむ. | |
109 そのため, どれだけデータが大きくなろうと, データが小さい時と同じ計算量でデータの取得が行える. | |
110 | |
111 Neo4j はマスターとスレーブの関係になるクラスタを構成することで分散データベースとして機能する. | |
112 マスターに書かれたデータはスレーブに書き込まれるが, すぐに全てのスレーブに書き込まれるわけではない. | |
113 したがってデータの整合性が失われる危険がある. | |
114 スレーブサーバは現在保持しているデータを返すことができる. | |
26
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
115 そのため Neo4j は高い読み取り性能の要求に答えることができる可用性と分断耐性を持つ. |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
116 |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
117 \begin{figure}[htpb] |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
118 \begin{center} |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
119 \includegraphics[scale=0.7]{figures/neo4j_replica.pdf} |
27
1abd3c17cff9
Added tree_conflict figures
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
26
diff
changeset
|
120 \caption{マスターとスレーブによるクラスタ} |
26
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
121 \label{fig:neo4j_replica} |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
122 \end{center} |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
123 \end{figure} |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
124 |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
125 |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
126 |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
127 |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
128 |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
129 |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
130 |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
131 |
388cd4555b3d
Added neo4j_replica, mongodb_sharding and cassandra_ring
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
132 |