マイクロソフト社がコスト効率を高め、パフォーマンスを向上、順応性を高めたAzure Cosmos DBの新機能を発表した。新しく発表された機能はバースト容量 、階層パーティション・キー、1TBのサーバーレス・コンテナ・ストレージ、プライオリティ・ベースの実行である。
Azure Cosmos DBはマイクロソフトのグローバル分散型マルチモデルデータベースサービスで、低レイテンシーでスケーラブルなストレージと、多様なデータタイプのクエリを提供している。このサービスのバーストキャパシティ機能は先日開催されたMicrosoft Build 2023で発表され、一般利用可能(GA)だ。これにより、ユーザーはデータベースやコンテナのアイドル時のスループットキャパシティを活用して、トラフィックの急増に対応できるようになった。さらに、Azure Cosmos DB for NoSQLのサブパーティショニングとしても知られる階層パーティションキーのGAとサーバーレスコンテナのストレージ容量の1TBへの拡大(従来は50GBが上限)も発表された。
それ以外にも、Azure Cosmos DBに送信するリクエストの優先順位を指定できる機能「プライオリティベース実行」のパブリックプレビューの提供を開始した。 リクエスト数がAzure Cosmos DBで設定された秒あたり要求ユニット(Request Units per second:RU/s)を超えると、ユーザー定義によって決定された優先度の高いリクエストの実行が優先度の低いリクエストより優先される。
マイクロソフトのプロダクトマネージャーであるRicha Gaur氏はブログでこう説明している。
この機能により、RU/sが設定されたコンテナが一度に処理できるリクエスト数よりも多くのリクエストがある場合、ユーザーは重要度の低いタスクを遅延させながら、より重要度の高いタスクを実行することができる。重要度の低いタスクは設定された再試行ポリシーに基づいて、SDKを使用するすべてのクライアントによって継続的に再試行される。
Using Mircosoft.Azure.Cosmos.PartitionKey;
Using Mircosoft.Azure.Cosmos.PriorityLevel;
//update products catalog
RequestOptions catalogRequestOptions = new ItemRequestOptions{PriorityLevel = PriorityLevel.Low};
PartitionKey pk = new PartitionKey(“productId1”);
ItemResponse<Product> catalogResponse = await this.container.CreateItemAsync<Product>(product1, pk, requestOptions);
//Display product information to user
RequestOptions getProductRequestOptions = new ItemRequestOptions{PriorityLevel = PriorityLevel.High};
string id = “productId2”;
PartitionKey pk = new PartitionKey(id);
ItemResponse<Product> productResponse = await this.conta
同様にレート制限(429)されていたリクエストも、バースト容量が利用可能な場合は処理できるようになったため、ユーザーは短時間の一時的なバーストでもパフォーマンスを維持できる。Microsoft Deep DiveのCosmos DBに関するブログ記事で、著者らは次のように説明している。
バースト容量では各物理パーティションは最大5分間のアイドル容量を利用できる。この容量は最大3000 RU/sの速度で処理できる。バースト容量は、物理パーティションごとのプロビジョニングが3000 RU/s未満のデータベースとコンテナに適用可能で、手動またはオートスケールのスループットを設定できる。
ソース:https://devblogs.microsoft.com/cosmosdb/deep-dive-new-elasticity-features/
パフォーマンスの最適化に加え、階層パーティションキーはCosmos DBの柔軟性を向上させる。この機能はユーザーが合成パーティションキーや20GBを超える論理パーティションキーを活用するときに役立つ。階層パーティション・キーを使って最大3つのキーを使用し、データをさらにサブパーティション化することで、より最適なデータ分散と大規模化が可能になる。 裏側ではAzure Cosmos DBは論理パーティションのプレフィックスがストレージの上限である20GBを超えることができるようにデータを物理パーティション間で自動的に分散する。
マイクロソフト社 Data Platform MVPのLeonard Lobel氏はIoTシナリオにおける階層キーの利点をブログ投稿で)で説明している。
デバイス ID と月に基づいて階層パーティション・キーを定義できる。そのため、データが20GB未満の場合のようにすべてのデータを単一のパーティションに保存するのではなく、20GBより多くのデータを蓄積するために複数の物理パーティションにまたがり、各月分のデータを個別の 20 GB 論理パーティション内に作成された "サブパーティション" に保存しておくことができる。その後、デバイス ID をクエリすると、常にシングルパーティション・クエリ(データが少ないデバイス)またはサブパーティション・クエリ(データが多いデバイス)のいずれかになる。
最後に、サーバーレス・コンテナのストレージ容量が1TBに拡張された。ユーザーはサーバーレス・コンテナの最大スループットの恩恵を5000RU/sから受けることができ、コンテナ内で利用可能なパーティション数によっては20,000RU/sを超えることも可能だ。