annotate paper/chapter1.tex @ 24:5316b4791570

Added master_paper.pdf
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Fri, 24 Jan 2014 11:14:24 +0900
parents 7df3a9a13b22
children 67880a2ca650
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
d42d2acf5d1d Added some tex files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
1 \chapter{既存の分散データベース}
d42d2acf5d1d Added some tex files
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
2
13
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
3 % NoSQL の説明はどこかで必要。
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
4
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
5 \section{Cassandra}
15
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
6 Cassandra は2008年7月に Facebook によってオープンソースとして公開された Key-Value なデータベースである.
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
7 Amazon の Dynamo という分散キーバリューデータベースの影響を受けて作られている.
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
8 スキーマレスな NoSQL データベースになる.
13
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
9
15
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
10 Cassandra はサーバノードの配置にコンシステント・ハッシングアルゴリズムを用いる.
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
11 コンシステント・ハッシングによりノードは論理的にリング上に配置される.
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
12 リングには数値で表される位置がある.
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
13 データを書き込む際には, キーとなるハッシュ値に従いそのリングの位置から時計回りに近いサーバノードへと書き込まれる.
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
14 コンシステント・ハッシングを用いることで, ノードの数が増減した場合に, 再配置をしなくてもよいという利点がある.
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
15 データの偏りにより少数のサーバへの負荷が大きい場合に, 負荷が高いハッシュ値が指すリング上に
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
16 新たなノードを追加することで負荷を下げるといった手段もとれる.
13
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
17
24
5316b4791570 Added master_paper.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
18 1つのデータを最大どれだけ複製にとるかという
5316b4791570 Added master_paper.pdf
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
19 またデータの読み込み, 書き込みの際に Consistency Level を指定することができるのも Cassandra の特徴である.
15
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
20 データ取得の際に, いくつのノードに問い合わせを行うのか設定するのが Consistentcy Level である.
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
21 Consistency Level には ONE, QUORAM, ALL があり, それぞれ1つのノード, 全体のノードの過半数+1, 全体のノード
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
22 への処理を設定することができる.
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
23 Cassandra は高い可用性と分断耐性をもつ.
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
24
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
25 % Consistency Level を変更できるところ
13
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
26 \section{MongoDB}
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
27 MongoDB は2009年に公開された NoSQL のデータベースである.
15
7df3a9a13b22 Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
28 JSON フォーマットのドキュメントデータベースであり, これはスキーマが無い
13
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
29 リレーショナルテーブルに例えられる.
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
30 スキーマが無いため, 事前にデータの定義を行う必要がない.
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
31 そのためリレーショナルデータベースに比べてデータの追加・削除
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
32 が行いやすい.
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
33
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
34 MongoDB は保存したデータを複数のサーバに複製をとる(replicate).
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
35 これはレプリケーション(replication)と呼ばれる.
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
36 また, 1つのサーバが全てのデータを持つのでなく, ある範囲の値を別々の
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
37 サーバに分割(シャード)させて保持する.
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
38 これをシャーディング(sharding)という.
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
39 MongoDB はレプリケーションとシャーディングにより分散データベースとして機能する.
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
40
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
41 % クエリ言語として JavaScript を採用しており, 演算子を自分作れるという利点を持つ.
22c48f2b344a chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
42 % スペルミスに弱い
14
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
43
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
44 \section{Neo4j}
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
45 No4j は, グラフデータベースと呼ばれる NoSQL のデータベースである.
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
46 データをグラフとして保存する.
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
47 グラフはノードとリレーションシップにより表され, それぞれがプロパティを持つことができる.
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
48 リレーションシップはグラフでいうところのエッジにあたる.
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
49 ノードからリレーションシップを辿り, 各プロパティをみることでデータの取得を行うことができる.
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
50 通常データベースでは, データの取り出しに価の結合や条件の判定を行う.
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
51 だが, グラフデータベースグラフはどれだけデータが大きくなろうがノードからノードへの移動は1ステップですむ.
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
52 そのため, どれだけデータが大きくなろうと, データが小さい時と同じ計算量でデータの取得が行える.
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
53
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
54 Neo4j はマスターとスレーブの関係になるクラスタを構成することで分散データベースとして機能する.
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
55 マスターに書かれたデータはスレーブに書き込まれるが, すぐに全てのスレーブに書き込まれるわけではない.
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
56 したがってデータの整合性が失われる危険がある.
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
57 スレーブサーバは現在保持しているデータを返すことができる.
df59b2af84e6 chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
58 それにより高い読み取り性能の要求に答えることができる高可用性を実現している.