では、今日も授業を始める。今日のテーマはデータベースの続きで、NoSQLだ。
DBって覚えること多いよね。
NoSQL(Not only SQL)について、みていこう。
NoSQLって何?
NoSQL(Not only SQL)データベースは、
RDB(リレーショナルデータベース)ではないデータベースだ。
今まで出てきたORACLEデータベースや、PostgreSQL、MS SQL Server、MySQL、MariaDBなどは、
すべてRDBだ。NoSQLはRDBではない。
NoSQLデータベースのメリットは、サーバ台数を増やして簡単にスケールできることだ。
NoSQLはビッグデータで利用される。
ビッグデータのような大量データを扱うときは、RDBではなくて、NoSQLが利用されるってことね。
うむ。GoogleやAmazon、Facebookなどの大量データを扱う企業でNoSQLが利用されているシステムがある。
NoSQLは処理も非常に高速だ。デメリットとしては、トランザクション機能を持っていないので、
データの一貫性がRDBと比較すると弱い。
トランザクションって何!?
トランザクションは、データ更新や取り消しを管理する処理のことだ。
例えば、口座から1000円を振り込む場合、処理的には自分の口座から1000円を引き落として、1000円を振り込むことになる。
これらの一連の処理(2つのUPDATE文)が、同時に実行されて結果がデータベースへ反映される必要がある。
このように複数のSQL文を1つの処理として実行してまとめてデータベースへ反映することをトランザクションという。
自分の口座から1000円を引き落としされて、振り込めていない状態はおかしいもんね。
一連の処理がうまくいったときにコミット(COMMIT)が実行されて、データベースに結果が反映される。
もし、トランザクションの途中でエラーが発生した場合はロールバック(ROLLBACK)が実行されて、データベースには結果が反映されないようになっている。
コミットもしくはロールバックが実行されてトランザクションが終了するってことね。
うむ。RDBはトランザクションがあるからデータ一貫性が強く、NoSQLにはトランザクションがないからデータ一貫性が弱い。
NoSQLには、キーバリュー型、ドキュメント型、グラフ型、カラム指向型の4つがある。
キーバリュー(Key-Value)型は、キーに対して、値が決まるNoSQLデータベースで、
memcached、Redis、Riak、アマゾンのDynamoなどがある。
例えば、memcachedはサーバ上のメモリにデータを保存するため、検索が速いが、揮発性だ。
揮発性って何?
データが揮発性というのは、停止するとデータが消えてしまうという意味だ。
memcachedのサービスを停止すると、memcachedのデータがすべて消えてしまう。
memcachedはデータをメモリ上に持っているから、サービスを停止しただけでデータが消えちゃうのか~。
でも、メモリにデータを持つということは、非常に処理が速いというメリットがある。
例えば、memcachedは、ユーザのセッション情報などを保存したりするケースで利用されたりする。
Redisっていうのは?
Redisはmemcachedに似ていて、メモリ上にデータを保存しているが、
Redisには一定期間ごとにスナップショットを取って、ディスクにデータを書き出す機能がある。
このスナップショット機能により、データの永続性を実現している。
Redisって、スゴイね。
次にカラム指向型はカラム(列)単位で処理を行うDBだ。例えば、Cassandra、Hbase、GoogleのBigtableなどがある。
グラフ型は、ノードやリレーションシップ、プロパティをもとに、データのつながりを管理するDBで、
Facebookのユーザー同士のつながりはグラフ型のNoSQLが利用されている。
グラフ型のNoSQLには、Neo4jやInfiniteGraphなどがある。
ドキュメント型はJSONやXMLのような自由な形式のデータを保存できる。
ドキュメント型には、MongoDBやCouchDBなどがある。
では、今日はここまで。
は~い
1.NoSQLはRDBではないデータベース
2.NoSQLはNot only SQL
3.NoSQLはサーバを増やして簡単にスケールアウトできる
4.NoSQLはビッグデータで利用
5.NoSQLはトランザクション機能がない
6.NoSQLはデータの一貫性がRDBと比較すると弱い
7.トランザクションはコミットもしくはロールバックを実行
8.NoSQLはキーバリュー型、ドキュメント型、グラフ型、カラム指向型がある
9.キーバリュー型はMemcached、Redis、Riak、Dynamo
10.memcachedは検索が速いが揮発性
11.Redisは不揮発性
12.カラム指向型はCassandra、Hbase、Bigtable
13.グラフ型はNeo4j、InfiniteGraph
14.ドキュメント型はMongoDB、CouchDB