毎年の話ではありますが、Microsoft Build のタイミングでは Cosmos DB は多くのアップデートが公開されます。今年の Build 2025 でも例によって大量のアップデートが公開されているので、特に NoSQL に関する機能についてまとめておきます。
見てわかるように Cosmos DB for NoSQL だけでも以下のように大量のアップデートが公開されています。継続的に投資が行われていることが分かります。
- Full Text Search / Hybrid Search が GA
- 英語以外の Full Text Search と Fuzzy Search が Public Preview
- Sharded DiskANN (Filtered vector search) が Public Preview
- Global Secondary Index が Public Preview
- Per Partition Automatic Failover が Public Preview
- Serverless to Provisioned Throughput が GA
- Cosmos DB Fleets が Public Preview
- Throughput Bucket が Public Preview
- JavaScript SDK v4 が GA
Build 2025 で発表された Cosmos DB のアップデート全体については、以下の 2 つのブログを見てもらうと大体把握出来るはずです。Cosmos DB for NoSQL に特化したブログとそれ以外という形になっています。
最近の流れに従う形で AI ワークロード向けの機能が多いですが、Cosmos DB for NoSQL ではスケーラビリティやパフォーマンス、更に信頼性の改善に繋がる機能が追加されています。サービスとしての使いやすさにも直結する部分なので嬉しいですね。
Full Text Search / Hybrid Search が GA
Ignite 2024 で発表された Cosmos DB の Full Text Search と BM25 を組み合わせた Hybrid Search が GA しました。Full Text Search は Vector Search とは異なり、後から Full Text Index を追加できるのが便利です。
Vector Search と Full Text Search を組み合わせると Hybrid Search が実現できるので、AI ワークロードのナレッジストアとして Cosmos DB が非常に扱いやすくなっています。ただし GA しましたが日本語アナライザーのサポートは追加されていないため、日本語のドキュメントで利用するのはしばらくお預けです。
英語以外の Full Text Search と Fuzzy Search が Public Preview
日本語の対応は入ってきませんでしたが、Full Text Search でドイツ語・スペイン語・フランス語への対応が Public Preview で追加されました。そして同時に Fuzzy Search のサポートも Public Preview になっているので、最大距離を明示的に指定することで柔軟な検索が実現できるようになっています。
英語以外の Full Text Search と Fuzzy Search については Public Preview なので、いつものように Cosmos DB の Features から明示的に機能を有効化する必要があります。
ちなみに Features の内部的な値はこれまで通りの EnableNoSQLFullTextSearch
なので、ARM Template や Terraform で利用する場合にはこの値を使えば問題ありません。これまで Full Text Search を試していた場合は、すでに有効化された状態になっているはずです。
Sharded DiskANN (Filtered vector search) が Public Preview
これまで DiskANN を含む Vector Search ではコンテナーの Partition Key に関係なく、データセット全体に対して Vector Search が行えていましたが、インデックスが大きくなればなるほどパフォーマンスは悪くなるので、Vector Search でも特定の値でインデックスを分割する機能が Shareded DiskANN になります。
Vector Index を作成する際に Shared Key を指定すると、その値に従って DiskANN のインデックスが作成されるので、それぞれのインデックスサイズが小さくなるためパフォーマンスが改善します。ただし検索時には Shared Key を指定する必要があるので、マルチテナントのシナリオに最適というわけです。
Global Secondary Index が Public Preview
これまでは Materialized Views という名前で提供されていた機能ですが、今回の Build のタイミングで大幅に機能がリニューアルされて Global Secondary Index という名前で Public Preview になりました。名前としては Index となっていますが、実体としては Change Feed で別の Container を作成する機能です。
Materialized Views の時は Dedicated Gateway が必要で追加コストがかなり大きく乗ってくる機能でしたが、Global Secondary Index は RU 以外の追加コストが発生しないようなので、かなり使いやすくなっています。その代わりにシンプルな射影のみ行えるという機能になっています。
例によって Features で有効化が必要になるので、その点だけは注意が必要です。既に Materialzied Views を有効化していたアカウントでは Global Secondary Index も使えるようになっています。
しかし自分が確認した限りでは、既存のアカウントと Container に対して GSI を作成した場合には上手く動作しませんでした。アカウントを新規に作成した場合は動作したので、既存アカウントへのデプロイが間に合っていない可能性はありそうです。
Per Partition Automatic Failover が Public Preview
Cosmos DB は内部的に物理パーティションと呼ばれるコンピューティングリソースが大量に存在することで、無制限のスケーリングが実現されています。そしてマルチリージョンの構成でも同じように物理パーティションがリージョン単位で同じだけ用意されています。
もし障害が発生してフェールオーバーが必要になった場合、これまでは全ての物理パーティションに対してフェールオーバーが行われていましたが、PPAF が有効になっている場合には障害が発生した物理パーティションのみフェールオーバーされるようになります。
これまでマルチリージョン構成で耐障害性を高めるにはマルチ書き込みを有効化してデプロイする必要がありましたが、PPAF が有効な場合はシングル書き込みの場合でも最小限の物理パーティションのみがフェールオーバーされるので、シンプルな構成を保ちつつも高い耐障害性を実現することが可能になります。
PPAF は Cosmos DB の信頼性を更に高めるアップデートになるので、GA が待ち遠しいですね。
Serverless to Provisioned Throughput が GA
Cosmos DB は Provisioned Throughput と Serverless の 2 つの容量モードが用意されていて、パフォーマンスとコストのどちらを優先するか決めやすくなっています。Serverless は完全従量課金となるのでスモールスタートに最適ですが、途中から Provisioned Throughput に変更することが出来ないので、サービスが大きくなった場合にはデータ移行が必要で手間がかかっていました。
今回シームレスに Serverless から Provisioned Throughput に変更できるようになったので、そのようなユースケースにも対応しやすくなりました。
Azure Portal から Cosmos DB アカウントを開くとツールバー部分にボタンが追加されているので、ここから簡単に Provisioned Throughput に変更可能です。
移行後の初期 RU は物理パーティションの数から自動的に設定されるので、移行後には必ず割り当てられた RU を再確認してください。思ったよりも高くなっている可能性があるので注意が必要です。
Cosmos DB Fleets が Public Preview
Build で新しく発表された機能としてはかなり注目度が高そうなのは、この Cosmos DB Fleets ではないかと思います。これまで Cosmos DB でマルチテナントのアプリケーションを実装する場合はパーティションキーを使って分離するという戦略を取ってきましたが、物理的にデータストアを分離したいという場合には Cosmos DB アカウントを分ける必要があり、それぞれで最小の RU を設定する必要があるためコストを最適化することが難しくなっていました。
しかし Fleets を使うと Fleets 単位で RU を事前に割り当てておくことが出来、その Fleets に追加された Cosmos DB アカウント間で割り当てられた RU を共有することが出来るので、全体として RU を最適化することが可能になります。
現在 Fleets はサブスクリプションから Preview Feature の登録をする必要があります。現状は利用できるサブスクリプションが絞られている可能性があるので、いち早く試したい場合には Cosmos DB チームへ連絡を取るのが一番早そうです。
少なくとも自分のサブスクリプションではまだ登録が完了していないので試すことが出来ていない状態です。マルチテナントな SaaS を提供しているシナリオでは待望の機能ではないかと思います。
Throughput Bucket が Public Preview
アプリケーションから Cosmos DB を使っている場合には、突然のアクセス増などで RU が一時的に不足して 429 エラーが発生することがあります。Cosmos DB SDK を使っている限り、適切にリトライが行われて動作に影響が出ることはほぼありませんが、重要な書き込み処理で 429 エラーが発生してしまうのは可能な限り避けたいです。
今回 Public Preview となった Throughput Bucket を使うと、割り当てられた RU を 5 つの Bucket として分割することが出来、処理毎にどの Bucket を使うか指定可能になります。
Throughput Bucket を使うことで、優先度の高い処理用の Bucket には多い RU を割り当てておき、優先度の低い処理には少ない RU を割り当てて最悪リトライで対応するといった処理が実現できるようになります。
現在 Public Preview になっている Priority-based Execution に近い機能にはなりますが、5 つまで Bucket を作成してそれぞれに RU を割り当てられるという点が大きく異なります。
JavaScript SDK v4 が GA
正直なところ v4.0.0 がリリースされたタイミングで正式版になったと考えていたのですが、Cosmos DB チームとしては JavaScript SDK の v4 はこのタイミングまでは Preview 扱いだったようです。
GA のタイミングで Bulk の改善や Vector Search と Full Text Search のサポートなどが行われているようです。大きな改善としてはクエリ実行のパイプラインが大きく改善されたようなので、アップデートする価値はかなり大きそうです。