Mercurial > hg > Papers > 2014 > nobuyasu-master
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アルゴリズムを用いる. |