はじめに
本連載ではこれまでAzureの提供するデータストアサービスとして、Azure StorageやSQLデータベースを紹介してきました。今回は、NoSQLデータベースサービスであるCosmos DBについて紹介していきます。
Azure Cosmos DBとは
Cosmos DBはAzureのデータベースサービスのうち、NoSQLデータベースを扱うサービスです。NoSQLは主にビッグデータを取り扱う際に使用される傾向にあります。ビッグデータを扱う際は3つの「V」、「Volume(膨大なデータ量)」、「Velocity(高速な処理)」、「Variety(多様なデータ形式)」に対応する必要があると言われていますが、これらを従来のRDB(SQL)を使用して処理しようすると、性能やコスト、スキーマ変更への柔軟な対応といった面への対応に多大な労力が必要となってしまいます。
NoSQLはビッグデータをいかに効率的に処理するかに主眼を置いて開発されたデータベースのため、高速なデータアクセスや高いスケーラビリティ、スキーマレスなデータ構造などの機能を有しています。また、NoSQLは「Not Only SQL」の略であることから、SQLと補完的な立場であるとも言われています。前述の通りビッグデータ対応に特化している反面、SQLが持つテーブル間のリレーションやトランザクション処理におけるACID特性などの概念や機能が存在しないNoSQLデータベース製品が多く、SQLとNoSQLとでユースケースによって住み分けをすべきだと考えられています。以下の表はRDB(SQL)とNoSQLの長短所についてまとめたものです。
RDBとNoSQLの比較
データベース | 長所 | 短所 |
---|---|---|
RDB | 豊富な機能、データ整合性の担保(ACID特性) | ビッグデータ対応 |
NoSQL | 高速な読み書き、スケーラブル、スキーマレス | 限定的な機能、緩い整合性(結果整合性) |
Cosmos DBも同様にNoSQLデータベースとしての特徴を持っています。また、他のNoSQLデータベースにはないCosmos DBならではの特徴も存在します。
Cosmos DBの特徴
Cosmos DBの大きな特徴には「グローバル分散」と「マルチモデルのデータベース」の2つが挙げられます。 まず「グローバル分散」ですが、これはAzureが世界中に展開するリージョン(データセンター)へのデータのレプリケーションをサポートし、データを世界中に分散して保持することを可能としています。世界中に分散してデータを保持することでアプリケーションのユーザは自身の現在地と地理的に近いリージョンのCosmos DBからデータを取得できるようになり、ネットワーク遅延による待機時間も削減できます。またデータの複製を保存するため高可用性も保証されます。Cosmos DBはグローバル分散を念頭に置いて開発されたデータベースのため、容易にデータベースをグローバル分散させることが可能となっています。
次に「マルチモデルのデータベース」についてですが、Cosmos DBでは複数のデータモデルの中から選択してデータベースを作成することができるようになっています。データモデルにはそれぞれ対応するAPIが存在し、Cosmos DBのSDKによって複数の言語から利用することができるようになっています。
Cosmos DBがサポートするデータモデル
データモデル | 説明 | 対応するAPI |
---|---|---|
ドキュメント型 | JSON形式のドキュメントを保存できるデータモデル | SQL API、MongoDB API |
グラフ型 | データとデータの繋がりをグラフ構造で保持するデータモデル | Graph(Gremlin) API |
テーブル型 | スキーマレスなテーブル構造でデータを保持するデータモデル | Table (キー・バリュー) API |
列ファミリ型 | Apache Cassandraベースのデータモデル | Cassandra API |
上の表は執筆時点でCosmos DBがサポートしているデータモデルと対応するAPIの表です。