Cosmos DB アップデートまとめ (2021/11 ~ 2022/3)
この記事について
この記事では、2021/11 ~ 2022/3 間にて発表された Azure Cosmos DB 関連のアップデート情報について触れています。
今回触れるアップデート情報の一覧
- 一般提供開始 (GA)
- パブリックプレビュー
一般提供開始 (GA)
部分ドキュメント更新
新しいコスト管理機能
インデックス作成メトリック
Azure Advisor でのコスト削減に関する推奨事項
Azure Advisor には、Azure Cosmos DB の自動化された推奨事項という機能があります。Azure Cosmos DB においては、次の領域に関する推奨事項がサポートされており、この領域に新しくコスト最適化に関する推奨事項
が登場したということになります。
- SDK の使用に関する推奨事項
- インデックス作成に関する推奨事項
- コスト最適化に関する推奨事項 <- New!!
- 移行の推奨事項
- クエリの使用に関する推奨事項
コスト最適化に関する推奨事項
にて RU/s の使用量を検出し、リソース変更や価格モデルの変更などでコストを最適化できるかどうかが判定されるようになっています。
具体的な推奨事項の中身については、下記を確認してください。
Azure Cosmos DB Cassandra API が Glowroot に対応
Glowroot とは、Java ベースのアプリケーションのパフォーマンスを最適化および監視するために使用できる OSS のアプリケーションパフォーマンス管理ツールです。
Azure Cosmos DB Cassandra API が今回、Glowroot に対応するようになりました。
Glowroot の glowroot-central.properties
ファイルにて、以下のプロパティにそれぞれ値を設定することで、Glowroot で Azure Cosmos DB Cassandra API と接続が可能になります。
- cassandra.contactPoints={Azure Cosmos アカウント名}.cassandra.cosmos.azure.com
- cassandra.username={Azure Cosmos アカウント名}
- cassandra.password={プライマリパスワード または セカンダリパスワード}
- cassandra.ssl=true
- cassandra.port=10350
- cassandra.gcGraceSeconds=0
Azure Cosmos DB Cassandra API で名前付きインデックスをサポート
Azure Cosmos DB Cassandra API で、いわゆる Cassandra で CREATE INDEX
を使用し、作成するテーブルの単一の列に対して セカンダリインデックス として新しいインデックスを作成することができるようになりました。
他の Azure Cosmos DB の API と異なり、Cassandra API では既定でエンティティの全ての属性のインデックスについては作成がされません。その代わり、Apache Cassandra と同様に動作するインデックスの作成機能がサポートされ、ユーザーは自身で任意の列に対してインデックスを作成し活用することができるようになっています。
Azure Cosmos DB for MongoDB API が MongoDB バージョン 4.2 に対応
Azure Cosmos DB for MongoDB API がバージョン 4.2 に対応しました。新規または既存のアカウントで、API バージョンを 4.2 に更新することが可能です。
バージョン 4.2 では新たに、$merge
や $regexFind
、$cos
などの三角関数式といったいくつかの集約機能がサポートされるようになりました。
また、クライアント側のフィールドレベルの暗号化
がサポートされ、個々のフィールドを選択的に暗号化できるようになりました。これにより、データベースドライバの利用時に追加の作業を組み込むことなく、データの明示的な暗号化、自動での複合化の機能を利用することができるようになります。したがって、より強固なデータベース保護を行うことが可能となりました。
Always Encrypted for Azure Cosmos DB が一般提供開始
Azure Cosmos DB SQL API で、Always Encrypted が利用できるようになりました。Azure Cosmos DB SQL API 内に保存されている秘匿情報や個人情報といったような、機密データを保護するための機能が Always Encrypted であり、SQL Database や SQL Server などでは既に導入がされている機能です。
Always Encrypted により、クライアントアプリケーション内部での機密データは暗号化され、暗号化キーがデータベース側に渡されることもありません。そのため、クライアントサイド暗号化を実現することが可能になります。Azure Cosmos DB 内にクレジットカード情報や国民番号といったような非常に機密度の高いデータについて、実際の値を保存することをしなくて済み、Azure Cosmos DB SQL API 単体では暗号化されたデータを復号することも不可のため、非常にセキュアなデータ保持が可能になります。
パブリックプレビュー
Azure Synapse Link for Azure Cosmos DB カスタムパーティショニングのサポート
新しい Azure Cosmos DB の Logic Apps 標準コネクタ
Azure Cosmos DB Cassandra API でのサーバー再試行機能の導入
Azure Cosmos DB には、要求ユニット (RU/s)
という単位があります。これは、Azure Cosmos DB によってサポートされるデータベース操作を実行するにために必要となる CPU、メモリ、ディスクの IOPS といったようなシステムリソースを抽象化したものを指しており、この要求ユニットのプロビジョニング量や消費量などによって、課金がなされるようになっています。
Azure Cosmos DB では、この要求ユニットをスループット制限として設けることができるようになっています(例えば、Free tier であれば 1,000 RU/s のスループット制限)。通常、Azure Cosmos DB では、このスループット制限を超える規模の操作をユーザーやアプリケーションが実行しようとした場合、HTTP 429 エラー
(Too Many Requests / OverloadedException) を返し、操作が強制的に終了されます。そのため、クライアント側では HTTP 429 エラーに対応するため、クライアント再試行ポリシーを実装することが通例です。
Azure Cosmos DB Cassandra API では、このクライアント再試行ポリシーをクライアント側で実装できない場合に、サーバー側の再試行(SSR)機能を利用することができ、短い遅延を以って、テーブルのスループット制限を超える操作を自動的に再試行させることができるようになりました。
なお、Azure Cosmos DB Cassandra API のサーバー再試行機能については、Azure Cosmos アカウント単位でのみ設定でき、キースペースやテーブル単位で設定はできないので注意です。
Python SDK で async IO (async/await) をサポート
これまでは、Microsoft Azure Cosmos Client Library for Python は同期クライアントの CosmosClient
を使用するしかなく、非同期処理を行うことができませんでした。
今回、新しく azure.cosmos.aio というものが Microsoft Azure Cosmos Client Library for Python 内に同梱されるようになり、非同期処理が可能な CosmosClient の作成が可能になりました。2022/4/10 時点では、この機能はプレビューのため、PyPI でもプレビュー用のライブラリをインポートして使う必要があります。
基本的な CosmosClient をはじめとするクラスの使い方に相違はありません。1 点違いがあるとすれば、当然の通り、非同期処理のために async
キーワードと await
キーワードを追加で使用するだけです。
コードサンプルについては GitHub に載っているため、興味がある人、一般提供開始に備えてコード改修を試みたい人は参照してみてください。
Azure Synapse Link for Azure Cosmos DB パーティション分割機能のサポート対象に Synapse Spark 3.1 が追加
昨年の Microsoft Ignite で登場した Azure Synapse Link for Azure Cosmos DB のカスタムパーティショニング(分析ストアのパーティション分割)は、プレビュー開始当時は残念なことに Spark 2.0 の Spark プールでの利用でしか扱えませんでした。今回、これが強化され、Spark 3.1 の Spark プールでもプレビュー利用ができるようになっています。
パーティションキーアドバイザーノートブックが登場
Azure Cosmos DB データエクスプローラーなどには、デフォルトで Jupyter Notebook 機能が備わっています。今回、Jupyter Notebook 機能を利用して、ワークロードに最適なパーティションキーを選択したりすることが可能になりました。
GitHub の Azure-Sample/cosmos-notebooks
にて、パーティションキーアドバイザーノートブック (.ipynb) がプレビュー公開され、データのアクセスパターンや読み取り情報をもとに、どういったパーティションキーを設定することが望ましいかというような情報を自身で取得できるようになりました。
公式情報
公式情報については、以下を参照してください。
-
Microsoft Docs
- Azure Cosmos DB の部分的ドキュメント更新
- Azure Cosmos DB アカウントでプロビジョニングされる合計スループットを制限する
- Azure Cosmos DB のインデックス作成メトリック
- Azure Cosmos DB の自動化された推奨事項
- Azure Cosmos DB Cassandra API で Glowroot を実行する
- Azure Cosmos DB の Cassandra API でサポートされる Apache Cassandra の機能
- Azure Cosmos DB Cassandra API でのセカンダリ インデックス作成
- Azure Cosmos DB での Cassandra API についてよく寄せられる質問
- MongoDB (4.2 サーバー バージョン) 用 Azure Cosmos DB API: サポートされる機能と構文
- Azure Cosmos DB の Always Encrypted でクライアントサイド暗号化を行う
- Azure Cosmos DB API for Cassandra の操作のレート制限エラーを回避する
- Azure Synapse Link for Azure Cosmos DB でのカスタム パーティション分割 (プレビュー)
- Azure Synapse Runtime for Apache Spark 3.1
-
Azure Cosmos DB Blog
-
GitHub
Discussion