Mercurial > hg > Papers > 2014 > nobuyasu-master
annotate paper/chapter1.tex @ 25:67880a2ca650
Modfied chapter1.tex
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 25 Jan 2014 22:24:03 +0900 |
parents | 5316b4791570 |
children | 388cd4555b3d |
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 |
25
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 % データベースはなんなのかをいれないと。 |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
5 % NoSQL の説明も必要。 |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
6 |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
7 この章ではまずデータベースの種類である RDB と NoSQL について述べる. |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
8 その次に, 既存の NoSQL データベースとして Cassandra, MongoDB, Neo4j について述べる. |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
9 |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
10 \section{RDB と NoSQL} |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
11 データベースは大別すると RDB と NoSQL に分けられる. |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
12 RDB とは関係と関係の属性により表されるスキーマをデータ構造に持つデータベースである. |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
13 データベースアクセス言語として SQL 言語を持つ RDB は一台の PC でデータを扱う分には最適である. |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
14 しかし, RDB はマシン単体以上の処理性能をだすことができない. |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
15 そこで, 汎用的な PC をいくつも用意しデータや処理を分散して管理できるデータベースが求められた. |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
16 それらのデータベースは NoSQL(Not Only SQL) と呼ばれる. |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
17 NoSQL は, SQL を使用するデータベースには向いていない処理を行うことを目的にしている. |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
18 |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
19 分散データベースは, NoSQL に分けられる. |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
20 |
13 | 21 |
22 \section{Cassandra} | |
15
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
23 Cassandra は2008年7月に Facebook によってオープンソースとして公開された Key-Value なデータベースである. |
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
24 Amazon の Dynamo という分散キーバリューデータベースの影響を受けて作られている. |
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
25 スキーマレスな NoSQL データベースになる. |
13 | 26 |
15
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
27 Cassandra はサーバノードの配置にコンシステント・ハッシングアルゴリズムを用いる. |
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
28 コンシステント・ハッシングによりノードは論理的にリング上に配置される. |
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
29 リングには数値で表される位置がある. |
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
30 データを書き込む際には, キーとなるハッシュ値に従いそのリングの位置から時計回りに近いサーバノードへと書き込まれる. |
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
31 コンシステント・ハッシングを用いることで, ノードの数が増減した場合に, 再配置をしなくてもよいという利点がある. |
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
32 データの偏りにより少数のサーバへの負荷が大きい場合に, 負荷が高いハッシュ値が指すリング上に |
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
33 新たなノードを追加することで負荷を下げるといった手段もとれる. |
13 | 34 |
25
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
35 データを最大どれだけ配置するかを示すレプリケーションファクタと, データの読み書きをいくつのノードから |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
36 行うのかを決めるコンシステンシーレベルを設定できる. |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
37 コンシステンシーレベルには主に ONE, QUORAM, ALL がある. |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
38 レプリケーションファクタの数値を N とした場合, ONE は1つのノード, QUORUM は N/2 + 1 のノード, ALL は N のノード |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
39 へと読み書きを行う. |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
40 コンシステンシーハッシング, レプリケーションファクタとコンシステンシーレベルの設定により Cassandra は |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
41 高い可用性と分断耐性を持つ. |
15
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
42 |
25
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
43 % keyspace, super column といったデータの表現についても述べるべきか? |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
44 % レプリケーションファクタはkeyspace毎に設定できる |
67880a2ca650
Modfied chapter1.tex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
45 |
13 | 46 \section{MongoDB} |
47 MongoDB は2009年に公開された NoSQL のデータベースである. | |
15
7df3a9a13b22
Writed research
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
48 JSON フォーマットのドキュメントデータベースであり, これはスキーマが無い |
13 | 49 リレーショナルテーブルに例えられる. |
50 スキーマが無いため, 事前にデータの定義を行う必要がない. | |
51 そのためリレーショナルデータベースに比べてデータの追加・削除 | |
52 が行いやすい. | |
53 | |
54 MongoDB は保存したデータを複数のサーバに複製をとる(replicate). | |
55 これはレプリケーション(replication)と呼ばれる. | |
56 また, 1つのサーバが全てのデータを持つのでなく, ある範囲の値を別々の | |
57 サーバに分割(シャード)させて保持する. | |
58 これをシャーディング(sharding)という. | |
59 MongoDB はレプリケーションとシャーディングにより分散データベースとして機能する. | |
60 | |
61 % クエリ言語として JavaScript を採用しており, 演算子を自分作れるという利点を持つ. | |
62 % スペルミスに弱い | |
14 | 63 |
64 \section{Neo4j} | |
65 No4j は, グラフデータベースと呼ばれる NoSQL のデータベースである. | |
66 データをグラフとして保存する. | |
67 グラフはノードとリレーションシップにより表され, それぞれがプロパティを持つことができる. | |
68 リレーションシップはグラフでいうところのエッジにあたる. | |
69 ノードからリレーションシップを辿り, 各プロパティをみることでデータの取得を行うことができる. | |
70 通常データベースでは, データの取り出しに価の結合や条件の判定を行う. | |
71 だが, グラフデータベースグラフはどれだけデータが大きくなろうがノードからノードへの移動は1ステップですむ. | |
72 そのため, どれだけデータが大きくなろうと, データが小さい時と同じ計算量でデータの取得が行える. | |
73 | |
74 Neo4j はマスターとスレーブの関係になるクラスタを構成することで分散データベースとして機能する. | |
75 マスターに書かれたデータはスレーブに書き込まれるが, すぐに全てのスレーブに書き込まれるわけではない. | |
76 したがってデータの整合性が失われる危険がある. | |
77 スレーブサーバは現在保持しているデータを返すことができる. | |
78 それにより高い読み取り性能の要求に答えることができる高可用性を実現している. |