NoSQLとRDBMSはどう違うのか
DB初心者がNoSQLとRDBMSの違いを調べてみた。
NoSQL=Not only SQL
RDBMS=Relational DataBase Managiment System
NoSQLのメリットは「性能」、「拡張性」、「非構造化データを扱えること」、「大規模データを扱える」だという。
・性能
RDBMSは更新時などには行単位のロックをかけなければならない。もし大規模なデータを扱うとなれば、サーバ台数を増やしてスケールアウトすることも必要となるが、一度ロックがかかるとその行にはアクセスできなくなるわけなので、スケールアウトした利点が生かせない場合がある。
一方NoSQLのキーバリューストアなどはロック単位が小さいため、分散処理に向く。例えば列志向の分散処理データストアのHBaseなどは典型例だろう。
・拡張性
これはRDBMSの欠点か。性能問題が出てきた場合、RDBMSでは制約が多く、性能改善を図るのが難しい(?)場合があるらしい。
・非構造化データを扱える
そもそもデータの持ち方が違う。
RDBMSは行でデータを管理する。また、行のスキーマ構造を設計段階で決める必要がある。そのスキーマは厳しく管理されていて、多くの制約がある。ただし、この制約があるからこそSQLを用いたビューや結合処理を実行することが可能になる。
NoSQLの代表的な例であるキーバリューストア(たとえばHBase)ではキー:値というシンプルな構造である。ハッシュのようなものを想像すると近いらしい。
・大規模データを扱える
RDBMSは大規模データを扱う場合、検索処理が重くなったりするので、indexを作ることがある。POSなどのビッグデータを扱う場合、このindexを作るのにも量が多すぎると更新処理のたびにindexを付け替える必要が出てくる。
他にもトランザクションの扱いが異なるなど、NoSQLとRDBMSは対になる特徴がある。RDBMSは一貫性を重視するため、トランザクション終了後は値が確定している。
一方NoSQLは値が未確定な期間が存在するなど、使い勝手を重視していることから犠牲にしている部分もある。
参考:
日経BP ITPro記事など
http://itpro.nikkeibp.co.jp/article/COLUMN/20121005/427842/?ST=bigdata&P=1
http://itpro.nikkeibp.co.jp/article/COLUMN/20120828/418821/?ST=bigdata&P=1
http://www.atmarkit.co.jp/flinux/rensai/noSQL/noSQL_05/05_1.html