しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Cosmos DB

ASP.NET (.NET Framework) 向けの各 Session State Provider が大規模アップデート

ASP.NET (.NET Framework) を利用したアプリケーションで必要になることが多い Session State Provider ですが、今年になってから大規模なアップデートが多いので一通り確認しておきました。現状 ASP.NET 向け Session State Provider は Cosmos DB / SQL Se…

Build 2023 で発表された Azure Cosmos DB のアップデート

先日開催された Microsoft Build 2023 では Azure Cosmos DB の新機能が数多く公開されました。ぶっちゃけかなり大規模な機能追加となっているので、気になる機能は個別に検証しつつまずは全体として NoSQL API に関連するアップデートをまとめることにしま…

Azure Cosmos DB の Burst Capacity (Preview) を試した

去年の Build で発表されていた Cosmos DB の Burst Capacity ですが、当時は Private Preview に近い形だったのでサインアップが必要で検証をしていなかったのですが、最近何となくドキュメントを確認するとサインアップの記述が消えていたので試しました。…

Azure Cosmos DB を使って安全にシーケンス番号を生成する

Cosmos DB には組み込みで RDB のようにシーケンス番号を生成する機能は用意されていないので、基本的には GUID / UUID を使うことになるのですが、稀にシーケンス番号が欲しくなることがあります。RDB というか SQL Server の場合は以下のようにシンプルに…

Azure Cosmos DB と Change Feed を支える LSN の話

2022 年も仕事で Cosmos DB と Change Feed を無限に使ってきたので、2022 年最後の日のブログはそれに相応しい Cosmos DB の話題で締めたいと思います。*1何気なく仕事で Cosmos DB と Change Feed を使っていると、時々 Change Feed は変更履歴を別で持っ…

Azure Functions の Cosmos DB Extension v4 が GA したので v3 からの移行を確認した

Preview が公開されてから 1 年以上が経過しましたが、ようやく Azure Functions の Cosmos DB Extension v4 が正式リリースされました。信頼性とパフォーマンスが大幅に改善、更に機能が追加された Cosmos DB SDK v3 ベースになっているので、現在 Extensio…

Azure Functions の Retry Policy 機能の GA に伴う仕様変更と Cosmos DB Trigger における対応方法

しばらく前から Azure Functions で Event Hub Trigger と Timer Trigger 以外で Retry Policy を設定している場合に、以下のような警告が起動時に出るようになりました。 [2022-11-19T08:19:24.241Z] Soon retries will not be supported for function 'Fun…

Azure Cosmos DB の物理パーティションを深く理解する

Cosmos DB を正しく利用する上で一番重要となるのがパーティションキーの設計ですが、Cosmos DB には一言でパーティションと言っても論理パーティションと物理パーティションの 2 種類が存在しています。この辺りの話は公式ドキュメントでも軽く触れられてい…

GitHub Actions / Azure Pipelines の Windows Runner で Azurite と Cosmos DB Emulator を利用する

以前に Azurite と Cosmos DB Emulator を使って GitHub Actions / Azure Pipelines でテストを実行する方法を書きましたが、Ubuntu Runner と Service Containers を利用した方法だったので Windows Runner では実質的には使えない方法でした。理由としては…

Azure で ASP.NET の Session State を利用する際のベストプラクティスを確認した

最近は移行絡みで Azure に ASP.NET アプリケーションを Session State 付きでデプロイすることが多いので、Azure 上で Session State を使う際のベストプラクティスを確認しておきました。この記事で触れるのは .NET Framework の ASP.NET であって、.NET 6…

各言語向けの Azure Cosmos DB SDK がサポートしている機能まとめ(随時更新)

Azure Cosmos DB は複数の API に対応したサービスとなっているので、利用している言語向けに Cosmos DB ネイティブの Core (SQL) API の SDK が提供されていなくても、代わりに Mongo や Cassandra の SDK を使って Cosmos DB を使ったサービスを開発するこ…

Cosmos DB SDK v3 に追加された ReadMany API を使って効率的に複数項目の取得を行う

去年リリースされた Cosmos DB SDK v3.18.0 から Point Read のような API で複数項目を 1 回のメソッド呼び出しで行える ReadMany API が追加されています。Point Read のような API デザインなので Id と対応した PartitionKey 両方の指定が必要です。API …

Cosmos DB の直接モード利用時に Application Insights で詳細なテレメトリを収集できるようにする

最近は色々なところで Application Insights をインストールして、アプリケーションのテレメトリを継続的にちゃんと取得しましょう的なことを言い続けているのですが、Cosmos DB に関してはデフォルトでは依存関係テレメトリが送信されません。ドキュメント…

Cosmos DB .NET SDK v2 の廃止と Azure Functions Cosmos DB Extension v4 プレビュー

少し前に Azure Cosmos DB .NET SDK v2 が 2024 年 8 月 31 日で廃止されることが発表されました。これで API 設計がイケてない Microsoft.Azure.DocumentDB 関連のパッケージがついに廃止されます。移行先となる Microsoft.Azure.Cosmos は十分な実績があり…

Azure Cosmos DB を ASP.NET Core の分散キャッシュのバックエンドとして利用する

少し前に Cosmos DB を ASP.NET Core の Distributed Cache Provider として使うライブラリの正式バージョンがリリースされました。ASP.NET 向けにも同じようなライブラリは出ていましたが、こちらは Cosmos DB SDK v3 で構築された最新版です。重要なことは…

GitHub Actions / Azure Pipelines 上で Azurite と Cosmos DB Emulator を使ったテストを実行する

GitHub や Azure DevOps を使った開発フローにテスト実行を組み込むのは一般的に行われていると思いますが、Azure Storage や Cosmos DB などに依存するテストを実行する際には、実際のリソースにアクセスさせるのではなくローカルで完結させたいことが多い…

Azure Cosmos DB Conf で Change Feed を中心としたアーキテクチャの設計と実装について話しました

今回が初の開催となる Azure Cosmos DB Conf で三宅さん (@kazuyukimiyake) と一緒に Change Feed を中心としたアーキテクチャの設計と実装について話しました。Cosmos DB の利用シーンの幅広さを実感出来るようなセッションが多いので、是非他のセッション…

Azure Cosmos DB における接続文字列の管理が RBAC サポートでついに不要に

Ignite は PaaS / Serverless 周りの話が少なかったですが、Cosmos DB に関してはいくつかアップデートがありました。その中でも RBAC サポートはアクセスキーや接続文字列を管理したくない勢としては待望の機能なので、使い勝手を確認しておきました。Cosmo…

Cosmos DB のインデックスポリシーの基本と最適化の方法

Cosmos DB は RDB のようにインデックスを個別で付ける必要がなく、デフォルトのままでも十分なパフォーマンスが出るようになっていますが、最適化を行うとスループットの向上やコスト削減に繋がります。特に最近は大量データの処理基盤として Cosmos DB を…

Azure Functions の Retry Policy 機能を使って信頼性の高い処理を実装する

GitHub 上で開発が進んでいることは把握していましたが、ついに待望の Retry Policy 機能が Azure Functions に実装されました。まだ Preview 扱いのようですが、1 年以上は待った気がします。単純にリトライするだけであれば Polly などを使えば済みますが…

Synapse Link for Cosmos DB が Synapse SQL Serverless から使えるようになったので試した

期待していた Synapse Link for Cosmos DB ですが、これまで Spark でしか扱えなかったのでスルーしていましたが、やっと SQL on-demand や Synapse SQL Serverless と呼ばれるサーバーレスモデルから扱えるようになったので気になった部分を試しました。リ…

Azure Cosmos DB Serverless が Preview になったので試した

Build 2020 で発表があった Cosmos DB の Serverless がプレビューとして公開されました。Autoscale が 1 時間毎の最大 RU で課金がされるのに対して、Serverless は完全に消費した RU によって課金が行われます。Cosmos DB チームはブログとドキュメントを…

Hack Azure! #2 Ask the Geeks - Cosmos DB 編フォローアップ

先週の木曜に "Hack Azure! #2 Ask the Geeks - Cosmos DB 編" と題して、Microsoft Corp の勇さん・ちょまどさん・Azure MVP の三宅さん・大平さんと自分の 5 人で Cosmos DB について話す会を行いました。今後も #HackAzure ということで Synapse Analytic…

Azure Cosmos DB v3 SDK の Bulk Support がとても使い勝手が良かった

少し前にリリースされた Azure Cosmos DB v3 SDK の Bulk Support を試そうと思いつつ放置してたのですが、仕事で割と良い感じのお題が降ってきたのでこれを機に試してみました。開発チームの人がブログで色々と紹介してくれているので、一通り目を通してお…

Cosmos DB .NET SDK v3 を使って快適に LINQ を書くコツ

Cosmos DB .NET SDK v2 の時は LINQ への変換が結構イマイチで、直接 SQL を書くことが多かったですが v3 ではかなり改善されているので、大体のクエリは LINQ だけで書けるようになっていました。対象が v2 か v3 なのかハッキリしませんが、ドキュメントも…

Azure Cosmos DB .NET SDK v3 GA 記念チートシート

5 月の Build で月末 GA が発表されていた Azure Cosmos DB の .NET SDK v3 ですが、昨日ついに正式版がリリースされました。特に Public Preview の時からは API が大きく変わっているので注意です。元は JavaScript SDK に近い API でしたが、途中で大幅に…

ASP.NET Core / Entity Framework Core 2.2 と Cosmos DB SDK の改善

書く気力がほぼ無かったんですけど、Cosmos DB の .NET SDK がついに OSS になったのを記念して書きます。.NET Core 3.0 とか Visual Studio 2019 は詳しい人が何か書くはず。とりあえずブチザッキと ufcpp.net を読んでおけば大体は掴めます。Preview 3 の…

Azure Data Factory を利用して Cosmos DB のコレクションをお手軽にコピーする

Azure の Cosmos DB を使っていて非常に困るのが、コレクションのパーティションキー設計を変更したい場合になった時です。パーティションキーは作成時にしか設定できず、後から変えることは不可能です。設計ミスと言われると何とも言い返せないのですが、こ…

Cosmos DB の SQL クエリパフォーマンスを調査する

仕事で Cosmos DB を使っていますが、最近は RU の消費が気になってきて、実際に投げたクエリがどのように実行されているのか知りたくなったので、例によっておーみさんに聞きました。実行計画とはいかなくとも、非常に参考になるメトリックを返してくれるよ…

Application Insights に Cosmos DB で消費された RUs を送信すると非常に捗った話

仕事で Cosmos DB を使ってアプリケーションを書きましたが、最近はあらかじめ割り当てておいた RU を突き抜けることがあって原因の調査を行っていました。その時に Cosmos DB のメトリックだけではコレクション別でしか RU を確認出来ず、Application Insig…