- 「○○○○だからスキーマレス最高!」
-
「カラムを固定できない場合に便利」
- RDBでもできるよ!例えば・・・
CREATE TABLE user (data TEXT); INSERT INTO user(data) VALUES ('{"user_id":1,"screen_name":"rinrin0108","age":24}'); ```
-
「開発時などスキーマの変更が頻繁に行われる場合に便利」
- RDBでもALTER TABLEするだけ!例えば・・・
ALTER TABLE user ADD nickname TEXT; ```
- 「データを分散して保存する場合に便利」
- RDBでもできるよ!例えば・・・
- 水平分割:キーとなる値によってデータベースを分ける方法
- 垂直分割:機能によってデータベースを分ける方法
- RDBでもできるよ!例えば・・・
なにより、表形式でスキーマかっちりの方がわかりやすくない?
というわけで、調査してみた。
トランザクションの概念が無いスキーマレスDB
| RDB | スキーマレスDB | |
| atomicity(原子性):トランザクション処理は全て実行されるか、まったく実行されない状態のいずれかで終わる | ○ | × |
| consistency(一貫性):トランザクション処理の前後でデータに矛盾を生じない | ○ | × |
| isolation(独立性):他のトランザクション処理から影響されない | ○ | × |
| durability(永続性):障害が発生しても更新結果は保持される | ○ | × |
- RDBでは、ACID特性が確保されるが、データ量やアクセス頻度の増大に伴ってACID特性を維持するためのコストが無視できなくなる。そこで、スケールアウト(分散)が必要になる。
- RDBでは「水平分割」や「垂直分割」ができるが、負荷分散や高可用性を低コストで実現することが困難。(レプリケーションやmemcachedも検索処理のスケールアウトには効果があるが、更新処理やテーブル結合のスケールアウトにはあまり効果がない)
- RDBサーバのスケールアップ(大型サーバへの載せ替え)
- DBのレプリケーションやシャード(パーティション)分割によるクラスタ構築
- 分散キャッシュ(Oracle RACやmemcachedなど)によるクラスタ構築
- RDBでは「水平分割」や「垂直分割」ができるが、負荷分散や高可用性を低コストで実現することが困難。(レプリケーションやmemcachedも検索処理のスケールアウトには効果があるが、更新処理やテーブル結合のスケールアウトにはあまり効果がない)
- スキーマレスDBでは、ACID特性が確保されず、アプリケーション側でのフォローが必要。一方で、データ量やアクセス頻度の増大に伴ってデータストア全体をいくらでも多くのサーバにスケールアウト(分散)できる。
- スキーマレスDBでは、「水平分散」が低コストで実現可能。
- スキーマレスDBでは、BASEという考え方を取り入れ、consistency(一貫性)を維持するためのコストを抑えている。BASEは、不整合が発生することは滅多にないという考え方に基づいている。
- BA:Basically Available
- 可用性を重視する。
- S:Soft-state
- 状態の厳密性は追求しない。
- E:Eventually consistent
- 最終的に一貫性のつじつまがあえばよい。ある時点では更新されていないケースもある。
- BA:Basically Available
| RDB | スキーマレスDB | |
| 分散化のコスト | × | ◎ |
| 負荷分散 | △ | ○ |
| 高可用性 | △ | ◎ |
| 複雑な検索や集計 | ○ | △ |
| トランザクション | ○ | △ |
- RDBと比較して、スキーマレスDBは圧倒的にスケーラビリティが高い。
- シャーディング(データベースの分散運用)が容易
- オートシャーディング機能により、ダウンタイム無くスケールアウトが可能
- (フェールオーバーのための)レプリケーションが容易
- シャーディング(データベースの分散運用)が容易
- RDB
- 厳密なスキーマ定義や動的なスケールアウトにコストがかかる
- スキーマレスDB
- スキーマやデータボリュームの変化に柔軟に対応可能
中でも、SaaSのように扱うデータがどんどん増えていくようなものについて
- RDB
- スケールアウトに多大なコストがかかる
- スキーマレスDB
- 低コストでスケールアウトが可能
- スキーマレスDBなら、低コストでスケールアウトを伴うシステムを構築できる→だから素晴らしい!
- ただし、一貫性(トランザクション)を保てない場合があるので注意が必要
- スキーマレスDBは、新しい技術との親和性が高い
- 今後、スキーマレスDBの需要が高まるはず!
- 分散Key-Valueストアの本命「Bigtable」
- CAP定理, BASEのまとめ(shmachid dot com)
- yohei-y:weblog
- NoSQLを知る