Azure Cosmos DBとは
はじめに
初投稿です。よろしくお願いします。
昨今のアプリケーションでは、オンプレミスからクラウドにシステムに移行するにつれて世界中にのユーザーから同時にアクセスされたり、IoTの普及によってセンサーデータなど世界各地から大きなデータを扱うようになったりして様々な課題が生じています。
本記事では、最新のクラウド規模のアプリケーションとユースケースをサポートするために構築された、フルマネージドのNoSQLデータベースであるAzure Cosmos DBを説明します。
Azure Cosmos DBとは
Azure Cosmos DBはAzureが提供するフルマネージドNoSQLデータベースです。
特徴は色々とありますが、以下が公式により挙げられています。
- 数ms(1桁台)の応答時間と、自動及び即時のスケーラビリティ
- SLAに基づいた可用性とエンタープライズグレードのセキュリティ
- 世界中でのマルチリージョン データ分散
- フルマネージドによる管理、更新、パッチ適用の不要
- 人気のあるAPI,SDKのサポート
- ニーズに対応した費用対効果の高いサーバーレス及びスケーリングオプション
Azureに契約をしなくとも無料でお試しなど行っていたり、Azure Cosmos DB Free レベルを取得して最初の1000RU/秒と25GBのストレージを無料で使用できます。
詳細説明
上記で挙げた特徴の詳細を説明していきます。
数ms(1桁台)の応答時間と、自動及び即時のスケーラビリティ
SLA に基づいた速度とスループット、ターンキーグローバル分散による高速なグローバルアクセス、および即時のスケールを実現します。
ターンキーグローバル分散とは、Azure CosmosDBを導入後にすぐ利用できる(ターンキー)、世界中のAzureリージョンにデータを自動的に分散配置する仕組みです。
グローバルでレプリケーションを設定しておくと、書き込み、読み込みで障害があったときに自動でフェイルオーバーしてくれます。
また、マルチリージョンで設定した場合に同期が非常に早く、新しいリージョンを設定した場合でも30分以内に別のリージョンにデータが同期されます。
公式の資料では以下がメリットとして挙げられています。
- 読み取りと書き込みの待ち時間が短いグローバルなリアルタイム アクセス、スループット、整合性のすべてがSLA に基づきます。
- マルチリージョン書き込みと任意の Azure リージョンへのデータ分散を行うことができます。
- 予測できないトラフィックのバーストが発生している場合でも、任意の Azure リージョンにわたってストレージとスループットを独立してスケーリングできます (世界中で無制限にスケーリング)。
99.999% の可用性、エンタープライズレベルのセキュリティ
すべてのアプリケーションについて、ビジネス継続性、99.999%(ファイブナイン) の可用性、およびエンタープライズレベルのセキュリティが保証されます。
SLAはただ単にレイテンシーにおけるSLAではなく、可用性についても99.99(フォーナイン)から99.999(ファイブナイン)までの可用性を保証します。
セキュリティではデータの暗号化から、呼び出し元の接続までデータが暗号化され非常にセキュアです。
公式の資料では以下がメリットとして挙げられています。
- Azure Cosmos DB は、業界をリードする可用性を含む SLA の包括的なスイートを全世界で提供します。
- 自動データ レプリケーションにより、任意の Azure リージョンにデータを簡単に分散できます。 厳密な整合性を使用した場合は、マルチリージョン書き込みまたは RPO 0 でゼロのダウンタイムが実現されます。
- 自己管理型のキーにより、エンタープライズグレードの保存時の暗号化が提供されます。
- Azure ロールベースのアクセス制御により、データが保護され、微調整された制御が提供されます。
フルマネージドかつ高いコスト効果
アプリケーション開発者の需要に対応するために、Cosmos DBはフルマネージドで多くを自動で調整します。
例えば、自動スケーリング、エンドーツーエンドのデータベース管理、自動フェイルオーバー、インデックスの問題も対処可能です。
全てのプロパティに対してインデックスが付与可能で、キー以外にもプロパティに対しても付与でき流のでバリューに対して検索やピンポイントでのデータ検索が可能になります。
公式の資料では以下がメリットとして挙げられています。
- フルマネージド データベース サービス。 自動、ノータッチ、メンテナンス、パッチの適用、および更新プログラムにより、開発者の時間と費用を節約できます。
- あらゆるサイズまたはスケールの予測不可能または散発的なワークロードに対するコスト効果に優れたオプション。これにより、開発者は、容量を計画または管理することなく簡単に作業を開始できます。
- サーバーレス モデルは、スパイクがよく発生するワークロードに対して自動かつ応答性の高いサービスを提供して、オンデマンドでトラフィック バーストを管理します。
- プロビジョニングされたスループットの自動スケーリングにより、予測できないワークロードに対して、SLA を維持しながら、容量が自動的かつ即座にスケーリングされます。
アプリケーション開発の簡略化
オープン ソース API シリーズ、複数の SDK、スキーマレス データ、運用データに対する非 ETL 分析を使用して迅速な構築を行うことができます。
Azureを使った開発で多く用いられるSDKのサポートが豊富に行われています。
個人的にはGoやRustのサポートを強化してくれると嬉しいです。(公式でないSDKは他にもあります。)
SQL(Core) API
- Core(SQL)は、Azure Cosmos DBのデフォルトAPIであり、従来のNoSQLドキュメントストアに似たデータのビューを提供します。SQLのような言語で階層JSONドキュメントをクエリできます。
MongoDB API
- MongoDB用APIを使用すると、既存のMongoDBクライアントSDK、ドライバー、およびツールが、実際のMongoDBデータベースに対して実行されているかのように、データと透過的に対話できます。データは、コア(SQL)を使用する場合と同じドキュメント形式で保存されます。
Gremlin (graph) API
- Gremlin APIはグラフデータの保存と操作に使用できます。APIは、グラフのモデリングとトラバースの可能性をネイティブにサポートします。ミリ秒のレイテンシでグラフをクエリし、グラフの構造とスキーマを簡単に進化させることができます。 つながりのあるデータの検索、可視化が用意なグラフDBはかなり注目されています。
Azure Table API
- AzureTable APIは、グローバルディストリビューション、高可用性、スケーラブルなスループットなどの機能を必要とするAzure TableStorage用に作成されたアプリケーションのサポートを提供します。Cosmos DBにテーブルデータを保存すると、すべてのプロパティに自動的にインデックスが付けられ、インデックス管理は必要ありません。
Cassandra API
- CassandraAPを使用すると、Cassandra Query Language(CQL)を使用してデータをクエリでき、データはパーティション化された行ストアのように支えます。MongoDB APIと同様、すべてのクライアントまたはツールはAzure CosmosDBに透過的に接続できます。
公式の資料では以下がメリットとして挙げられています。
- Azure Functions、IoT Hub、AKS (Azure Kubernetes Service)、App Service などの最新の (クラウドネイティブ) アプリ開発で使用される主要な Azure サービスと緊密に統合されます。
- ネイティブ Core (SQL) API、MongoDB 用 API、Cassandra API、Gremlin API、Table API などの複数のデータベース API シリーズから選択できます。
- .NET、Java、Node.js、Python 用の SDK で任意の言語を使用して、Core (SQL) API でアプリを構築できます。 または、他の任意のデータベース API シリーズ用のドライバーを選択できます。
- Azure Synapse Analytics を使用して、Azure Cosmos DB に格納されているほぼリアルタイムの運用データに対して非 ETL 分析を実行できます。
- 変更フィードを使用すると、簡単にデータベース コンテナーに対する変更を追跡および管理し、Azure Functions を使用してトリガー イベントを作成できます。
- Azure Cosmos DB のスキーマレス サービスでは、データ モデルに関係なくすべてのデータに自動的にインデックスを付けて、きわめて高速なクエリを実現します。
RU(要求ユニット)について
Azure Cosmos DB では、データベース操作、使用済みストレージ、オプションの専用ゲートウェイ (有効な場合) に対して課金されます。
ちなみにRUはRequest Unitの略で、公式によると以下です。
要求単位は、要求の処理コストを標準化した測定単位です。 1 つの要求ユニットは、10 個の一意のプロパティ値 (システム プロパティを除く) で構成される 1 KB のアイテムの読み取り (self リンクまたは ID による) に必要な処理能力を表します。
・要求ユニットとスループットの推定 - Azure Cosmos DB | Microsoft Docs
つまり1KB相当のデータの読み取りで1RU消費するということです。ちなみに書き込みでは1KBで5RU消費します。
ここでの1KBですが、取得したいオブジェクトデータとは別に、付属されるシステム構成のデータ、メタデータなどが自動で付与されるため、明確な料金を調べたい場合はなるべく本番に近い状態で計測するべきです。
活用方法
- 私が思うCosmos DBの適した用途についてです。
- Azureを使っている、Microsoftアカウントがある会社(重要)
- 大量のデータ追加、削除、参照が行われるシステム
- 半構造化、非構造化データを扱うシステム
Azureを使っている、Microsoftアカウントがある会社
- Azure CosmosDBはMicrosoft Azureが運営しているのでそちらを使用しているシステム、導入しようとしているシステムに適しています。SDKサポートも.NET(C#とか)やNode.JS(Typescript)などmicrosoftよりの言語が多いです。
社内で使用している環境が違うのに無理に合わせる必要はありません。Google Cloud SpannerやAWSのAuroraやDynamoDB など、選択肢はたくさんあります。
大量のデータを扱うシステム
- Azure Cosmos DBはIoTシステムなど、大量データの追加や削除、参照が行われるシステムに適しています。
例えば、自動車に搭載したカーナビやGPSなどのデバイスをインターネット経由で接続するテレマティクスでは、様々な場所にある大量のデータをリアルタイムに取り込み、分析する必要があります。このような大量データの読み取りと書き込みが必要なシステムに対してはCosmosDBが持つ1桁msの高い応答性能が大きな力になるでしょう。
半構造化、非構造化データを扱うシステム
-
半構造化データとは、RDBMSが扱う、スキーマにより表形式に構造化されたデータではなく、JSONやXMLのような柔軟で自由度の高いデータのことを指します。非構造化データとは、画像や音声データ、動画など、構造化できないファイルデータ全般のことです。これらのデータは、構造化データのようなスキーマやリレーションを持たず、多種多様なデータに対して迅速なスループットが求められる場合に利用されます。大容量の画像や動画コンテンツを発信するWebサービスなどにおいてはAzure CosmosDBが適していると言えます。
Azure CosmosDBの一般的なユースケースとシナリオでもCosmos DBのユースケースと利点が理解できます。
導入事例
導入事例についてはMicrosoft Articlesに多く掲載されています。まだまだ発展途上ですが、今後さらに増えていくと予想されます。
CosmosDBを使用したIoT-AzureSolution
CosmosDBを使用してグローバルに分散されたアプリケーション-AzureSolution
CosmosDBを使用したパーソナライズ-AzureSolution
CosmosDBを使用したゲーム-AzureSolution
補足情報
本記事で述べなかった箇所のリンク、私が思う優良記事を載せておきます。
Azure Synapse Link
- Azure Synapse Linkを使用すると、CosmosDBのデータに対してリアルタイムに近い分析が行えます。
NoSQL データベースとリレーショナル データベースの違いについて
- RDBMSに対する NoSQLの主な利点、NoSQLの使用に関する課題について説明されています。
Azure Cosmos DB のドキュメント
- 全部入ってます。完璧なドキュメントです。
各APIのチュートリアル
- Azure Cosmos DB SQL API を使ってみる
- Azure Cosmos DB の MongoDB 用 API の概要
- Azure Cosmos DB Cassandra API を使ってみる
- Azure Cosmos DB Gremlin API を使ってみる
- Azure Cosmos DB Table API を使ってみる
参考文献
さいごに
ここまでお読みいただきありがとうございました。
Azureが必要になったとき、CosmosDBの概要が知りたいときにご活用ください。
Discussion
丁寧な記事をありがとうございます✨