comparison paper/chapter1.tex @ 68:01fadc801c18

fixed
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Sat, 01 Feb 2014 21:06:49 +0900
parents c06ec0269eba
children 4f31182c8244
comparison
equal deleted inserted replaced
67:2fa14ca42ca6 68:01fadc801c18
5 本章ではまずデータベースの種類であるRelational DatabaseとNoSQL について述べる. 5 本章ではまずデータベースの種類であるRelational DatabaseとNoSQL について述べる.
6 次に, 分散データシステムにおいて重要な CAP 定理について触れる. 6 次に, 分散データシステムにおいて重要な CAP 定理について触れる.
7 最後に既存の NoSQL データベースとしてmemcached, MongoDB, Neo4j, Cassandraの特徴について述べる. 7 最後に既存の NoSQL データベースとしてmemcached, MongoDB, Neo4j, Cassandraの特徴について述べる.
8 8
9 \section{Relational Database} 9 \section{Relational Database}
10 RDBは列と行からなる2次元のテーブルにより実装されるデータベースである. 10 Relational Database(RDB)は列と行からなる2次元のテーブルにより実装されるデータベースである.
11 データ型として文字列, 数値, 日付, BOOL型がありシステムによりデータに型が強制される. 11 データ型として文字列, 数値, 日付, BOOL型がありシステムによりデータに型が強制される.
12 RDBはスキーマの決まったデータを扱うことに長けている. 12 RDBはスキーマの決まったデータを扱うことに長けている.
13 構造化言語問い合わせ言語としてSQLがある. 13 構造化言語問い合わせ言語としてSQLがある.
14 14
15 RDBはデータベースの中でも長年主要な立ち位置にあるデータベースだが, 苦手としている 15 RDBはデータベースの中でも長年主要な立ち位置にあるデータベースだが, 苦手としている
16 ことがある. 16 ことがある.
17 それは, スキーマレスなデータの扱いやマシンの台数を増やして処理速度 17 それは, スキーマレスなデータの扱いやマシンの台数を増やして処理速度
18 をあげることである. 18 をあげることである.
19 それらRDBが苦手としていることを得意とするNoSQLと呼ばれるデータベースがある. 19 垂直分割や水平分割といった方法によりデータを分けることはできるが, 分割を行うほど
20 データの扱いは複雑になっていく.
21
22 それらRDBが苦手としていることを得意とするデータベースとしてNoSQLがある.
20 23
21 \section{NoSQLデータベース} 24 \section{NoSQLデータベース}
22 NoSQLはNot Only SQLの略で, SQLを使わないデータベースのことを指す. 25 NoSQLはNot Only SQLの略で, SQLを使わないデータベースのことを指す.
23 NoSQLデータベースはRDBとは違いスキーマがない. 26 NoSQLデータベースはRDBとは違いスキーマがない.
24 そのため, 扱おうとしているデータの形が決まっていなくても気軽に使うことができる. 27 そのため, 扱おうとしているデータの形が決まっていなくても気軽に使うことができる.
25 また, スケーラビリティも持ちあわせており, 汎用的なマシンを集めることで性能をあげる
26 ことができるといった特徴を持つ.
27 28
28 NoSQLは, RDBには向いていない処理を行うことを目的にしている. 29 %また, スケーラビリティも持ちあわせており, 汎用的なマシンを集めることで性能をあげる
30 %ことができるといった特徴を持つ.
29 31
32 後述するConsistency HashingやShardingといった方法で複数ノードでデータの分散を行うことで
33 スケーラビリティの確保を行う.
34 単純なノードの追加により負荷分散を行うことができる.
35
36
37
38 \newpage
30 \section{CAP 定理} 39 \section{CAP 定理}
31 分散データシステムにおいて次の3つを同時に保証することはできない 40 分散データシステムにおいて次の3つを同時に保証することはできない
32 \begin{itemize} 41 \begin{itemize}
33 \item 一貫性(Consistency) 42 \item 一貫性(Consistency)
34 全てのノードはクエリが同じならば同じデータを返す. 43 全てのノードはクエリが同じならば同じデータを返す.
39 \end{itemize} 48 \end{itemize}
40 これは CAP 定理\cite{cap}と呼ばれる. 49 これは CAP 定理\cite{cap}と呼ばれる.
41 利用するデータベース選ぶ場合, このCAP定理を意識しなければならない. 50 利用するデータベース選ぶ場合, このCAP定理を意識しなければならない.
42 一貫性と可用性を重視したデータベースが, RDBである. 51 一貫性と可用性を重視したデータベースが, RDBである.
43 分断耐性を必要とする場合は NoSQL データベースとなる. 52 分断耐性を必要とする場合は NoSQL データベースとなる.
44 そしてNoSQLの場合, 分断耐性と後もう一つ, 一貫性か可用性のどちらを保証しているかで用途が変わってくる. 53 そしてNoSQLの場合, 分断耐性と後もう一つ, 一貫性か可用性のどちらを重視しているかで用途が変わってくる.
45 54
46 分散データシステムを考える場合は, この CAP 定理を意識していなければならない. 55 分散データシステムを考える場合は, この CAP 定理を意識していなければならない.
47 56
48 57
49 \section{memcached} 58 \newpage
59
60 \section{既存のNoSQLデータベース}
61 ここでは既存のNoSQLデータベースに説明する.
62 それぞれの特徴を述べながら, どのような方法でスケーラビリティを確保しているのかについて述べる.
63
64 \subsection{memcached}
50 memcachedは揮発性の分散型キャッシュである. 65 memcachedは揮発性の分散型キャッシュである.
51 Key-Valueストアとなっている. 66 Key-Valueストアとなっている.
52 RDBとも連携して使うことができ, その場合メモリの中にデータを保持させることでディスクへのアクセスを減らし 67 RDBとも連携して使うことができ, その場合メモリの中にデータを保持させることでディスクへのアクセスを減らし
53 処理性能を上げることができる. 68 処理性能を上げることができる.
54 メモリの容量がなくなると, LRU(Least Recently Used)のため一番古いデータはメモリから削除されてしまう. 69 メモリの容量がなくなると, LRU(Least Recently Used)のため一番古いデータはメモリから削除されてしまう.
67 \end{center} 82 \end{center}
68 \end{figure} 83 \end{figure}
69 84
70 85
71 86
72 87 \newpage
73 \section{MongoDB} 88 \subsection{MongoDB}
74 MongoDB は2009年に公開された NoSQL のデータベースである. 89 MongoDB は2009年に公開された NoSQL のデータベースである.
75 JSON フォーマットのドキュメントデータベースであり, これはスキーマが無い 90 JSON フォーマットのドキュメントデータベースであり, これはスキーマが無い
76 リレーショナルテーブルに例えられる. 91 リレーショナルテーブルに例えられる.
77 スキーマが無いため, 事前にデータの定義を行う必要がない. 92 スキーマが無いため, 事前にデータの定義を行う必要がない.
78 そのためリレーショナルデータベースに比べてデータの追加・削除 93 そのためリレーショナルデータベースに比べてデータの追加・削除
97 \end{figure} 112 \end{figure}
98 113
99 114
100 \newpage 115 \newpage
101 116
102 \section{Neo4j} 117 \subsection{Neo4j}
103 Neo4j は, グラフデータベースと呼ばれる NoSQL のデータベースである. 118 Neo4j は, グラフデータベースと呼ばれる NoSQL のデータベースである.
104 データをグラフとして保存する. 119 データをグラフとして保存する.
105 グラフはノードとリレーションシップにより表され, それぞれがプロパティを持つことができる. 120 グラフはノードとリレーションシップにより表され, それぞれがプロパティを持つことができる.
106 リレーションシップはグラフでいうところのエッジにあたる. 121 リレーションシップはグラフでいうところのエッジにあたる.
107 ノードからリレーションシップを辿り, 各プロパティをみることでデータの取得を行うことができる. 122 ノードからリレーションシップを辿り, 各プロパティをみることでデータの取得を行うことができる.
124 \end{figure} 139 \end{figure}
125 140
126 \newpage 141 \newpage
127 142
128 143
129 \section{Cassandra} 144 \subsection{Cassandra}
130 Cassandra\cite{cassandra} は2008年7月にFacebookによってオープンソースとして公開された Key-Value なデータベースである. 145 Cassandra\cite{cassandra} は2008年7月にFacebookによってオープンソースとして公開された Key-Value なデータベースである.
131 AmazonのDynamo\cite{dynamo} という分散Key-Valueデータベースの影響を受けて作られている. 146 AmazonのDynamo\cite{dynamo} という分散Key-Valueデータベースの影響を受けて作られている.
132 スキーマレスな NoSQL データベースになる. 147 スキーマレスな NoSQL データベースになる.
133 148
134 Cassandraはサーバノードの配置にConsistent hashingアルゴリズムを用いる. 149 Cassandraはサーバノードの配置にConsistent hashingアルゴリズムを用いる.