“適切なデータモデリング”のハードルを下げる機能その1 「Burst capacity」

三宅和之氏(以下、三宅):ちょっとベクトル検索はそれぐらいにして、(スライドを示して)本当は今日はこっちを言いたいのですが(笑)。あまり時間がないので、重要なものだけを紹介しますね。

Cosmos DBは先ほど言ったように、ハイパースケールなデータベースなのですが、お金を払えばそれが実現するかというとそんなにうまい話はなくて、きちんと設計しないといけません。

何を考慮しないといけないかだけで、4時間ぐらい話せるのですがそこを10分ぐらいで話すと、私が個人的に思うのはこの3つです。スループットでいかに最適化するかという話と、パーティションを(スライドを示して)この図のとおりに水平スケールさせるからメリットが出るのであって、そのためにはきちんとパーティションで分割できる設計が必要です。

そのためには、入っていくデータに対しても適切なモデリングが必要で、そういうことが前提にあって先ほどのメリットが出せるという話なんですね。なので、今まではちょっととっつきにくかったんですよ。正直そういう部分がありました。今回のアップデートで、そこのハードルをグンッと下げるものが2つ、3つ出ました。

1つは、スループットの調整をさらにしやすくするための手段として、Burst capacityというものがあります。これはGAになったので、みなさん今すぐ使えます。これは何かというと、スループットを設定しておかないといけないんですね。青い線が入っていますが、これは1,000RUという単位で、これを超えるとDBは「受け付けませんよ」とリクエストを受け付けなくなってしまいます。

通常のDBとは違って、スピードは保証しているので遅くなることはありませんが、その代わり決められたスループットを超えてしまうと利用できなくなってしまいます。それに対する対策をいろいろと打つんですね。今回は一番簡単な方法です。Burst capacityをオンにしておけば、ふだん使っていない部分を溜めておいてくれます。貯金しておいてくれる。

いざトラフィックが増えて超えてしまった場合に、その貯金を充填してくれます。結局、料金計算の部分だけをやってくれているので、サーバーが実際に増えて大きくなったり小さくなったりしているわけではありません。良い感じに料金計算上きちんと収まるようにしてくれて、429エラーを出して「これ以上リクエストを受け付けられません」というのが出ないようにしてくれる機能です。

これは、設定をポチっと押すだけでできますし追加料金がかからないので、基本的に常にオンにしておいたほうがいいんじゃないの? という、メチャクチャ推しの機能です。Cosmos DBをこれからやる方は、この設定を必ずオンにしてやってください。

“適切なデータモデリング”のハードルを下げる機能その2 「Hierarchical partition key」

もう1つですね。partition keyをうまく分散させるためにはデータを分散させるkeyの設定が必要だったんですね。今までこれは1つしか選べなかったので、どういうkeyを設定したらいいかというのが本当に難しかったんです。うまくハマるケースもあれば、システムの目的によってはけっこうハマらないケースもありました。特にマルチテナントのデータベースですね。

マルチテナントのデータベースは、まずマルチテナントのテナントを絞り込んでからデータを絞り込んでいきたいのですが、1つしかパーティションが切れないとそれができなかったんですよ。ですが、今回は3段階までpartition keyを設定できるようになりました。

まずマルチテナントのテナントで、この紫色の部分ですね。テナントで絞ってから、その中のユーザーやチームでさらにデータを絞り込んで高速にアクセスできるという機能が出て、それがGAしているので、マルチテナントのデータベースをCosmos DBで構築している時に「partition keyに悩む」という方は、これで今までの悩みが全部解決します。

特にこの1パーティションは20GB制限があって、これがあるとテナント単位をpartition keyにしにくかったのですが、そこを超えられるようになったので、これは大きな革命です。Cosmos DBはデビューしてから6、7年になると思いますが、大前提が今のこれで覆ったのでこれは本当に熱いです。

この熱さがなんとなく伝わってくれるとうれしいんですけど(笑)。詳細はわからないと思うので、後ほどそれをフォローするイベントを紹介します。

“適切なデータモデリング”のハードルを下げる機能その3 「Change Feed」

あとはChange Feedですね。イチオシの機能と言いましたが、これも大きなアップデートがありました。変更点を基本的に配信してくれていたのですが、実は全部の変更ではなかったんですね。サマリーして配信されていた部分がありましたが、それでも十分に対応できるシナリオは多かったです。

ですが、やはり完全な変更を送ってほしいというニーズが多く、特にイベントソーシングパターンを使ってシステムを構築されるケースだと、そこは完全な変更が欲しかったというのがあって、完全なイベントソーシングがサポートできるようにすべての変更と削除が配信されるようになったので、Change Feedを活用したさらに応用的なアーキテクチャができるようになるかなと思います。(スライドを示して)これはプレビューですね。

このChange Feedをガッツリ活用している例を、今日はスタートアップのイベントなのでお話しします。AGRISTという、農業スタートアップの例です。Cosmos DBで受けたものを使って、いろいろな目的別にデータを配信して、スタートアップなのでどんどんサービスを追加していきます。

でも、Change Feedを活用して、スモールスタートでどんどんサービスを追加していて、今はもうスタートアップを卒業されているんでしたっけ? スタートアッププログラムを卒業されているのですが、ビジネスをスケールさせたCosmos DBの例で紹介させていただきたいなと思います。

参考情報とAzure技術支援プログラムの紹介

最後に、参考情報の紹介をさせてください。Cosmos DBのアップデートは、公式ブログに全部バーッとまとまっています。後でURL付きのスライドをアップロードするので、そちらをご覧ください。あとは、日本人で私と同じMVPの、しばやん(芝村達郎氏)という方がいるのですが、これをさらに日本語化してもっとわかりやすいブログを書かれているので、そこのリンクも後で紹介しますね。後でまとめて紹介するページをアップロードしたいと思います。

私も最後に少しだけ紹介させてください。スタートアッププログラムを技術力でサポートする、「ZEN Advisor」というので日々の開発をお手伝いしています。

あとは、これはけっこう評判をいただいているのですが、先ほどのAGRISTも使ったサービスで「Azure Light-up」というサービスがあります。

私たちと一緒に2、3日でプロトタイプを一気に作って、Azureを使ったアーキテクチャをできるだけ早くビジネスで使えるようにするプログラムがあるのでぜひご活用ください。ということで私からは以上です。ありがとうございます。

開発が非常に活発で、おもしろいデータベースになっている

司会者:ありがとうございます。非常に熱いアップデートで、たぶん熱量が伝わっているのかなと。Twitterを見ながら「伝わっているな」と、感じました。

三宅:本当ですか? 良かった。

司会者:質問がいくつかあって、1個は公開させていただければと思います。「細かな話で恐縮ですが、Change Feedは write once でしょうか?」というご質問です。いかがですか?

三宅:Change Feedを図を使って簡単に言うと、これはパーティションも関連するのですが、パーティションの中では順序保証がされています。そこがメリットですね。なので、パーティション設計はとても重要になりますよということがそういうところでわかってほしいですね。これで回答になっていますかね? 大丈夫ですかね?

司会者:大丈夫だと思います。ちょっとまだお時間があるので、もし今回Cosmos DBというハイパースケールなデータベースがメインではありましたが、他にもかなり大量のアップデートがあったと思います。口頭でCosmos DB以外に「他にもこれが良かったよ」というのがあれば。

三宅:Cosmos DB以外ですか?

司会者:Cosmos DBの今の中でももちろんいいですし、そこに関連するところであれば。

三宅:Cosmos DBの話でいうと、実は今日追加のアップデートがあったんですよ(笑)。これはまだ検証をしていないのですが、「いろいろやった後にまだ出してくるか」みたいなところで、priority-based executionというのが今朝出ました。これもパフォーマンス系で、要はリクエストの中で優先度の高いものは「絶対に先ほどのスループットの中に入るように」という優先順位を付けられるようになりました。

例えば非常に重要な、ユーザー操作による更新処理のような絶対に漏らしたくないものはプライオリティを高めにしておけば中に入りますし、逆に漏れたものがどうなるかというと、別にリクエストを受け付けないのではなく、きちんと裏側でリトライポリシーを使っています。Cosmos DBは秒間のスループットの設定なので、次の秒になって空いていれば使えるんですよね。

裏側で少し遅れて処理してくれるのを勝手にコントロールする機能が、今日急に出てきてビックリしました。

司会者:Buildが終わってもまだアップデートが追加されるのってすごいですよね。

三宅:本当にすごいですね。それぐらいですかね。開発が非常に活発で、おもしろいデータベースになっています。とっつきにくい部分については、来週のウェビナーを聞いてもらえばだいたいクリアになります。Cosmos DBというのは、パーティション設計をクリアすると全部見えてきます。しかも今回は階層パーティションでメチャクチャ使いやすくなったので、だいぶとっつきやすくなっているはずです。ChatGPTでも使われているので。

司会者:そうですね。

三宅:安心して使ってください。

司会者:三宅さん、ありがとうございました。