リレーショナルデータベースとキーバリューストア
ビッグデータ処理の時代に向け、様々な種類・手法のデータベースが出始めていますが、現在のところ、主流のデータベースはまだ大きく2種類、リレーショナルデータベース(以下、RDB)とキーバリューストア(以下、KVS)です。それぞれ以下の特徴を持っています。
データベースの種類 | データ保持形式 | 分散方法 | 主な製品 |
---|---|---|---|
RDB | 表 | マスタースレーブ クラスタ | MySQL参考1 PostgreSQL参考2 など |
KVS | キーとバリューのペア | 負荷分散 | Dynamo参考3 Bigtable参考4 Cassandra参考5 など |
図1:データ保持形式の違い
図2:分散方法の違い
RDBとKVSは一見するとデータの保持形式と分散方法が異なるだけですが、それぞれ次項で述べるデータベースの特性を満たすことを目的に作られているため、システムの処理特性に合わせて選択する必要があります。
データベースの特性
RDBはACIDという特性、KVSはBASEという特性を満たすために作られています。ACIDとは以下4つの要素を意味し、データの一貫性保証を重視しています。
- Atomicity(原子性)
トランザクションが成功するか、処理前の状態に戻ることを保証する。
- Consistency(一貫性)
トランザクション前後でデータの矛盾が無く、データベースの状態が正しいこと。
- Isolation(独立性)
トランザクション実行中のデータ変更や処理内容が他のトランザクションや処理の影響を受けないこと。
- Durability(永続性)
一度コミットされた情報は失われないことを保証する。
BASEとは以下3つの要素を意味し、可用性を重視しています。
- Basically Available(基本的に利用可能)
利用可能な状態を常に作る。
- Soft-state(柔軟な状態)
ノードの状態が一時的に失われても、定期的に状態情報を取得することにより状態が復元される。
- Eventual Consistency(最終的な一貫性)
一時的にはデータに不整合な状態が生じるが最終的には一貫性が保たれる。
これらのデータベース特性を考慮した上で、システムに求められる処理特性に合わせてデータベースを選択する必要があります。例えば「複数のデータを一度に処理するようなシステムの場合、処理中のデータが参照できると不正なデータ取得にも繋がるため、厳格なトランザクションが可能なRDBを利用する」、あるいは「想定外の障害やキャパシティを超えてしまった場合でもシステムダウンを防ぎたいので、拡張性の高いKVSを利用する」といった判断で選択を実施します。
参考として、今注目を集めている「スキーマレスデータベース」や「ドキュメント思考データベース」は、KVSを拡張したものになるため、利用する場合はKVSの特徴を考慮することが前提となります。
クラウドでのデータベース利用
RDBやKVSは仮想マシン上に自ら構築する他、クラウドプロバイダが提供している製品を利用することもひとつの手です。AWSのDynamo DBやRDS、salesforceのdatabase.comなどがあります参考6、7。運用コスト削減の反面、細かいチューニングが出来ないといった場合もあるため、システムの処理特性を考慮した上で、プロバイダが提供している物を使うかどうかも合わせた選択が必要です。