【cosmosDB】RDBMSとNoSQLは何が違うのか

AzureのcosmosDBはNoSQLで構成されているのですが、今回NoSQLに触れる機会が初めてだったので、RDBMSとの違いについてまとめてみました。

RDBMSとは

まず簡単にRDBMSの概要を記します。

RDBMSはRelational Database Management Systemの略で、データを行と列で構成されるテーブル形式で格納するデータベース管理システムです。代表的なRDBMSとしてはMySQL, PostgreSQL, Oracle Database, Microsoft SQL Serverなどがあります。

RDBMSはNoSQLと比較して相対的に厳格で、データはテーブル構造に合致したものでないといけなかったり、ACID特性によりデータの整合性を保証したりする特徴があり、データの一貫性が高く保たれる設計になっています。また、SQLを用いてデータの操作とクエリを行うのも特徴です。

一方で、一貫性を保証しているためにスケールアウトができず、大規模なデータになればなるほど処理速度が低下してしまうというデメリットも存在します。

NoSQLとは

次にNoSQLの概要を記します。

NoSQLはNot Only SQLの略で、RDBMSの制約を超えた、スキーマレスなデータモデルを格納できるデータベース管理システムです。例えば、ドキュメント型、グラフ型など、さまざまな形式のデータを格納できます。代表的なNoSQLとしては、MongoDB, Redisなどが存在します。

NoSQLの特徴はこの柔軟性だけでなく、分散アーキテクチャにもあります。複数のサーバーにデータを分散して格納する仕組みとなっており、これによって高可用性と障害耐性を実現しています。

この分散アーキテクチャは、一貫性が保証されないというデメリットにもなりますが、ここはRDBMSの特徴とトレードオフの関係ですね。スケールアップしかできない(いつか限界がくる)RDBMSに対してスケールアウトができる点は、NoSQLの強みと言って良いでしょう。

どんなシステムに適しているのか

RDBMSは先ほども触れたようにデータに一貫性があり、整合性が重要であるデータベースに対して利用されます。また、SQLが利用できるという点で、データベースに対する複雑な処理であったり、システムでSQLを利用する前提のものなどはRDBMSが必然的に利用されます。

具体的な例としては、金融、会計、人事システムなど、データの信頼性・一貫性が重要となるデータベースに対しては、RDBMSが利用されます。

NoSQLは、柔軟性という特徴を活かして、SNSやリアルタイムデータ分析、大規模データ処理が行われる場面で利用される傾向にあります。

どこかTCPとUDPの関係性に似たものを感じますね。

なぜcosmosDBではNoSQLが利用されるのか

cosmosDBがNoSQLを利用することにより実現しているメリットは、高いスケーラビリティ、柔軟性、パフォーマンスにまとめられます。

Microsoftの提供するAzureは、世界各地にデータセンターを所持しているので、データのグローバル分散ができるのは、可用性とデータ取得の迅速さの点において有利に働きます。

また、サブスクリプション型で提供するサービスであるため、水平スケーリングにより柔軟にリソースの追加や削減ができる点は、サービスの適合性としてはとても高いと言えます。

Azureの他のサービスとも連携できるという点で、データとしてマルチモデルをサポートしていること、スキーマレスであることも、使い勝手の良いデータベースとして採用されている一つの要因だと考えられます。