comparison paper/chapter1.tex @ 69:4f31182c8244

fixed
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Sat, 01 Feb 2014 22:41:24 +0900
parents 01fadc801c18
children 4e8bfd65768f
comparison
equal deleted inserted replaced
68:01fadc801c18 69:4f31182c8244
17 それは, スキーマレスなデータの扱いやマシンの台数を増やして処理速度 17 それは, スキーマレスなデータの扱いやマシンの台数を増やして処理速度
18 をあげることである. 18 をあげることである.
19 垂直分割や水平分割といった方法によりデータを分けることはできるが, 分割を行うほど 19 垂直分割や水平分割といった方法によりデータを分けることはできるが, 分割を行うほど
20 データの扱いは複雑になっていく. 20 データの扱いは複雑になっていく.
21 21
22 それらRDBが苦手としていることを得意とするデータベースとしてNoSQLがある.
23
24 \section{NoSQLデータベース} 22 \section{NoSQLデータベース}
25 NoSQLはNot Only SQLの略で, SQLを使わないデータベースのことを指す. 23 NoSQLはNot Only SQLの略で, SQLを使わないデータベースのことを指す.
26 NoSQLデータベースはRDBとは違いスキーマがない. 24 NoSQLデータベースはRDBとは違いスキーマがない.
27 そのため, 扱おうとしているデータの形が決まっていなくても気軽に使うことができる. 25 そのため, 扱おうとしているデータの形が決まっていなくても気軽に使うことができる.
28 26
29 %また, スケーラビリティも持ちあわせており, 汎用的なマシンを集めることで性能をあげる 27 %また, スケーラビリティも持ちあわせており, 汎用的なマシンを集めることで性能をあげる
30 %ことができるといった特徴を持つ. 28 %ことができるといった特徴を持つ.
31
32 後述するConsistency HashingやShardingといった方法で複数ノードでデータの分散を行うことで 29 後述するConsistency HashingやShardingといった方法で複数ノードでデータの分散を行うことで
33 スケーラビリティの確保を行う. 30 スケーラビリティの確保を行う.
34 単純なノードの追加により負荷分散を行うことができる. 31 単純なノードの追加により負荷分散を行うことができる.
35 32
36 33
64 \subsection{memcached} 61 \subsection{memcached}
65 memcachedは揮発性の分散型キャッシュである. 62 memcachedは揮発性の分散型キャッシュである.
66 Key-Valueストアとなっている. 63 Key-Valueストアとなっている.
67 RDBとも連携して使うことができ, その場合メモリの中にデータを保持させることでディスクへのアクセスを減らし 64 RDBとも連携して使うことができ, その場合メモリの中にデータを保持させることでディスクへのアクセスを減らし
68 処理性能を上げることができる. 65 処理性能を上げることができる.
69 メモリの容量がなくなると, LRU(Least Recently Used)のため一番古いデータはメモリから削除されてしまう. 66 LRU(Least Recently Used)のため, メモリの容量がなくなると一番古いデータはメモリから削除されてしまう.
70 memcachedは永続性は考慮していない. 67 memcachedは永続性は考慮していない.
71 68
72 また, 分散を行う機能はサーバ側に備わっておらず, クライアント側の実装に任せている. 69 また, 分散を行う機能はサーバ側に備わっておらず, クライアント側の実装に任せている.
73 クライアント側ではノードのリストを保持している. 70 クライアント側ではノードのリストを保持している.
74 データの読み書きの際には, クライアント側で実装されている分散アルゴリズムい従って 71 データの読み書きの際には, クライアント側で実装されている分散アルゴリズムい従って
76 73
77 \begin{figure}[htpb] 74 \begin{figure}[htpb]
78 \begin{center} 75 \begin{center}
79 \includegraphics[scale=0.7]{figures/memcached.pdf} 76 \includegraphics[scale=0.7]{figures/memcached.pdf}
80 \caption{memchachedのデータ分散} 77 \caption{memchachedのデータ分散}
81 \label{fig:memchached} 78 \label{fig:memcached}
82 \end{center} 79 \end{center}
83 \end{figure} 80 \end{figure}
84 81
85 82
86 83
92 スキーマが無いため, 事前にデータの定義を行う必要がない. 89 スキーマが無いため, 事前にデータの定義を行う必要がない.
93 そのためリレーショナルデータベースに比べてデータの追加・削除 90 そのためリレーショナルデータベースに比べてデータの追加・削除
94 が行いやすい. 91 が行いやすい.
95 92
96 MongoDB は保存したデータを複数のサーバに複製をとる. 93 MongoDB は保存したデータを複数のサーバに複製をとる.
97 これはレプリケーション(replication)と呼ばれる. 94 これはReplicationと呼ばれる.
98 また, 1つのサーバが全てのデータを持つのでなく, ある範囲の値を別々の 95 また, 1つのサーバが全てのデータを持つのでなく, ある範囲の値を別々の
99 サーバに分割させて保持する. 96 サーバに分割させて保持する.
100 これをShardingという. 97 これをShardingという.
101 MongoDB はレプリケーションとShardingにより分断耐性と一貫性を持つ. 98 MongoDB はReplicationとShardingにより分断耐性と一貫性を持つ.
102 99
103 % クエリ言語として JavaScript を採用しており, 演算子を自分作れるという利点を持つ. 100 % クエリ言語として JavaScript を採用しており, 演算子を自分作れるという利点を持つ.
104 % スペルミスに弱い 101 % スペルミスに弱い
105 102
106 \begin{figure}[htpb] 103 \begin{figure}[htpb]
115 \newpage 112 \newpage
116 113
117 \subsection{Neo4j} 114 \subsection{Neo4j}
118 Neo4j は, グラフデータベースと呼ばれる NoSQL のデータベースである. 115 Neo4j は, グラフデータベースと呼ばれる NoSQL のデータベースである.
119 データをグラフとして保存する. 116 データをグラフとして保存する.
120 グラフはノードとリレーションシップにより表され, それぞれがプロパティを持つことができる. 117 グラフはノードとRelationshipにより表され, それぞれがプロパティを持つことができる.
121 リレーションシップはグラフでいうところのエッジにあたる. 118 Relationshipはグラフでいうところのエッジにあたる.
122 ノードからリレーションシップを辿り, 各プロパティをみることでデータの取得を行うことができる. 119 ノードからRelationshipを辿り, 各プロパティをみることでデータの取得を行うことができる.
123 通常データベースでは, データの取り出しに価の結合や条件の判定を行う. 120 通常データベースでは, データの取り出しに価の結合や条件の判定を行う.
124 だが, グラフデータベースグラフはどれだけデータが大きくなろうがノードからノードへの移動は1ステップですむ. 121 だが, グラフデータベースグラフはどれだけデータが大きくなろうがノードからノードへの移動は1ステップですむ.
125 そのため, どれだけデータが大きくなろうと, データが小さい時と同じ計算量でデータの取得が行える. 122 そのため, どれだけデータが大きくなろうと, データが小さい時と同じ計算量でデータの取得が行える.
126 123
127 Neo4j はマスターとスレーブの関係になるクラスタを構成することで分散データベースとして機能する. 124 Neo4j はマスターとスレーブの関係になるクラスタを構成することで分散データベースとして機能する.
170 へと読み書きを行う. 167 へと読み書きを行う.
171 Replication factorとConsistentcy Levelの設定により, Cassandraは最新のデータを取得したいときと 168 Replication factorとConsistentcy Levelの設定により, Cassandraは最新のデータを取得したいときと
172 そうでないときで読み込みと書き込みの速度をあげることができる. 169 そうでないときで読み込みと書き込みの速度をあげることができる.
173 一貫性が重要なデータに関してはQUORUMにより書き込み読み込みを行うことで常に最新のデータを取得することができる. 170 一貫性が重要なデータに関してはQUORUMにより書き込み読み込みを行うことで常に最新のデータを取得することができる.
174 多少データが古くてもよい場合はONEなどを使用することでレスポンスを早くすることができる. 171 多少データが古くてもよい場合はONEなどを使用することでレスポンスを早くすることができる.
175 ConsisutencyLevel QUORUMの時のデータ書き込みについて図\ref{fig:cassandra_quorum}に示す. 172 ConsisutencyLevel QUORUMの時のデータ書き込みと読み込みについて図\ref{fig:quorum_write}と図\ref{fig:quorum_read}に示す.
176 Consistencyハッシング, Replication factorとConsistencyレベルの設定により Cassandra は 173 Consistencyハッシング, Replication factorとConsistencyレベルの設定により Cassandra は
177 高い可用性と分断耐性を持つ. 174 高い可用性と分断耐性を持つ.
178 175
179 \begin{figure}[htpb] 176 \begin{figure}[htpb]
180 \begin{center} 177 \begin{center}
181 \includegraphics[scale=0.6]{figures/consistency_quorum.pdf} 178 \includegraphics[scale=0.6]{figures/cassandra_quorum_write.pdf}
182 \caption{ConsisteyncyLevel QUORUMによる書き込み} 179 \caption{ConsisteyncyLevel QUORUMによる書き込み}
183 \label{fig:cassandra_quorum} 180 \label{fig:quorum_write}
181 \end{center}
182 \end{figure}
183
184 \begin{figure}[htpb]
185 \begin{center}
186 \includegraphics[scale=0.6]{figures/cassandra_quorum_read.pdf}
187 \caption{ConsisteyncyLevel QUORUMによる読み込み}
188 \label{fig:quorum_read}
184 \end{center} 189 \end{center}
185 \end{figure} 190 \end{figure}
186 191
187 192
188 193