分散システムでは、バックエンドのデータストアにリレーショナルDBを使用することが一般的です。しかし巨大な分散システムとなるクラウドシステムにおいては、RDBでは限界があります。今日は、クラウドシステムにおけるリレーショナルDBの限界について、おさらいしたいと思います。
1.RDBをデータ種別によって分割した場合
クラウドのように分散システムが巨大化した場合、データボリュームの増加と、アクセス数の増加から、単一のリレーショナルDBでは対応しきれなくなります。よって、リレーショナルDBを分割して対処することになるのですが、まずはデータ種別で分割した場合についてみてみます。
たとえばマスタデータ系、トランジションデータ系など、データの種別で分割した場合、ある程度の負荷分散はできるものの、とてもクラウドのボリュームには対応できません。なぜならば、マスタデータ系は運用時の登録・更新の頻度が少ないのに対し、トランザクション系では日々のデータ登録・更新処理が格段に多く、これではトランザクション系のDBにアクセスが集中してしまいます。
2.RDBをデータ範囲によって分割した場合
次に、データ範囲で分割した場合についてみてみます。
上の図では、リレーショナルDBをユーザーコメント数1万件ごとに分割しています。ユーザーコメントという同じ属性を格納している別個のデータベースが複数存在するため、読み書き時にはデータの範囲によってDBを選択するロジックが必要となります。
DB選択ロジックは、
- どのような属性のテーブルが格納されており、そのなかのレコード番号の何番目から何番目のレコードが格納されているか
- 保有されるテーブルのレコード番号と対応する主キー値
上記2つの情報を保持しておく必要があります。
この場合、主キー以外の列項目範囲での条件検索は時間がかかり、Join検索は実際不可能で、クラウドで要求される大規模な分散システムでのデータ格納には向きません。
まとめ
上記の理由から、クラウドシステムでリレーショナルDBを使うのは限界があります。そこでKVS(Key-Value Store:キー・バリュー・ストア)と言われるデータ形式が、クラウドシステムでは使用されるようになっています。
KVSはリレーショナルDBのような機能豊富なSQLを使うことが出来ないため、NoSQLと言われることもあります。特徴としては、テーブル構造を定義するスキーマがなく、関係モデルや演算処理を重視しません。
KVSについてはまた別途まとめたいと思います。