💻

Cosmos DB アップデートまとめ (2021/11 ~ 2022/3)

2022/04/10に公開

この記事について

この記事では、2021/11 ~ 2022/3 間にて発表された Azure Cosmos DB 関連のアップデート情報について触れています。

今回触れるアップデート情報の一覧

一般提供開始 (GA)

部分ドキュメント更新

https://zenn.dev/ymasaoka/articles/summary-of-cosmosdb-updates-msignite2021fall#部分ドキュメント更新が一般提供開始

新しいコスト管理機能

https://zenn.dev/ymasaoka/articles/summary-of-cosmosdb-updates-msignite2021fall#新しいコスト管理機能が一般提供開始

インデックス作成メトリック

https://zenn.dev/ymasaoka/articles/summary-of-cosmosdb-updates-msignite2021fall#インデックス作成のメトリックに新機能が追加

Azure Advisor でのコスト削減に関する推奨事項

Azure Advisor には、Azure Cosmos DB の自動化された推奨事項という機能があります。Azure Cosmos DB においては、次の領域に関する推奨事項がサポートされており、この領域に新しくコスト最適化に関する推奨事項が登場したということになります。

  • SDK の使用に関する推奨事項
  • インデックス作成に関する推奨事項
  • コスト最適化に関する推奨事項 <- New!!
  • 移行の推奨事項
  • クエリの使用に関する推奨事項

コスト最適化に関する推奨事項 にて RU/s の使用量を検出し、リソース変更や価格モデルの変更などでコストを最適化できるかどうかが判定されるようになっています。
具体的な推奨事項の中身については、下記を確認してください。

https://docs.microsoft.com/ja-jp/azure/cosmos-db/automated-recommendations#cost-optimization-recommendations

Azure Cosmos DB Cassandra API が Glowroot に対応

Glowroot とは、Java ベースのアプリケーションのパフォーマンスを最適化および監視するために使用できる OSS のアプリケーションパフォーマンス管理ツールです。
Azure Cosmos DB Cassandra API が今回、Glowroot に対応するようになりました。

https://glowroot.org/

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 と同様に動作するインデックスの作成機能がサポートされ、ユーザーは自身で任意の列に対してインデックスを作成し活用することができるようになっています。

https://docs.microsoft.com/ja-jp/azure/cosmos-db/cassandra/secondary-indexing

https://docs.microsoft.com/ja-jp/azure/cosmos-db/cassandra/cassandra-faq#cassandra-api------------------------------------

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 などの三角関数式といったいくつかの集約機能がサポートされるようになりました。
また、クライアント側のフィールドレベルの暗号化がサポートされ、個々のフィールドを選択的に暗号化できるようになりました。これにより、データベースドライバの利用時に追加の作業を組み込むことなく、データの明示的な暗号化、自動での複合化の機能を利用することができるようになります。したがって、より強固なデータベース保護を行うことが可能となりました。

https://docs.microsoft.com/ja-jp/azure/cosmos-db/mongodb/feature-support-42

https://devblogs.microsoft.com/cosmosdb/azure-cosmos-db-api-for-mongodb-v4-2-is-here-three-reasons-to-upgrade-now/

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 単体では暗号化されたデータを復号することも不可のため、非常にセキュアなデータ保持が可能になります。

https://docs.microsoft.com/ja-jp/azure/cosmos-db/how-to-always-encrypted?tabs=dotnet

パブリックプレビュー

https://zenn.dev/ymasaoka/articles/summary-of-cosmosdb-updates-msignite2021fall#azure-synapse-link-for-azure-cosmos-db-のカスタムパーティショニングがプレビュー開始

新しい Azure Cosmos DB の Logic Apps 標準コネクタ

https://zenn.dev/ymasaoka/articles/summary-of-cosmosdb-updates-msignite2021fall#高スループットのデータ処理を可能にする新しい-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 アカウント単位でのみ設定でき、キースペースやテーブル単位で設定はできないので注意です。

https://docs.microsoft.com/ja-jp/azure/cosmos-db/cassandra/prevent-rate-limiting-errors

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 でもプレビュー用のライブラリをインポートして使う必要があります。

https://pypi.org/project/azure-cosmos/4.3.0b4/

基本的な CosmosClient をはじめとするクラスの使い方に相違はありません。1 点違いがあるとすれば、当然の通り、非同期処理のために async キーワードと await キーワードを追加で使用するだけです。
コードサンプルについては GitHub に載っているため、興味がある人、一般提供開始に備えてコード改修を試みたい人は参照してみてください。

https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/cosmos/azure-cosmos#using-the-asynchronous-client-preview

昨年の Microsoft Ignite で登場した Azure Synapse Link for Azure Cosmos DB のカスタムパーティショニング(分析ストアのパーティション分割)は、プレビュー開始当時は残念なことに Spark 2.0 の Spark プールでの利用でしか扱えませんでした。今回、これが強化され、Spark 3.1 の Spark プールでもプレビュー利用ができるようになっています。

https://zenn.dev/ymasaoka/articles/summary-of-cosmosdb-updates-msignite2021fall#azure-synapse-link-for-azure-cosmos-db-のカスタムパーティショニングがプレビュー開始

パーティションキーアドバイザーノートブックが登場

Azure Cosmos DB データエクスプローラーなどには、デフォルトで Jupyter Notebook 機能が備わっています。今回、Jupyter Notebook 機能を利用して、ワークロードに最適なパーティションキーを選択したりすることが可能になりました。
GitHub の Azure-Sample/cosmos-notebooks にて、パーティションキーアドバイザーノートブック (.ipynb) がプレビュー公開され、データのアクセスパターンや読み取り情報をもとに、どういったパーティションキーを設定することが望ましいかというような情報を自身で取得できるようになりました。

https://github.com/Azure-Samples/cosmos-notebooks/blob/master/PartitionKeyAdvisor_RetailDemo.ipynb

公式情報

公式情報については、以下を参照してください。

Discussion