TiDBを使ったアプリケーションのサンプル「OSS Insight」

ここまで、TiDB Serverlessをどうやって作っていったかというコンセプトをご紹介してきました。ここから、TiDB Serverlessを実際に使ってみたという話をしたいと思います。

「Eat your own dog food」とよく言いますが、私たちは、TiDBを使ったアプリケーションのサンプルとして「OSS Insight」というものを作っています。

アクセスしたことがなければ、ぜひ今、アクセスしていただきたいのですが、OSS Insightは、GitHubの今までのイベントレコード、65億件かな……を全部先ほどのTiDB Serverlessに取り込んで、なおかつリアルタイムで、今発生しているイベントも全部取り込んでいます。

なので、言ってしまえば、GitHubの、誰がコミットした、プルリクエストした、そういったイベントが全部覗けるサイトになっているんですね。その上で、さまざまなGitHubの分析や、ランキングみたいなものを提供しているサイトになります。

デモ

ちょっとデモを見ていただくのですが、このサイトでは、OpenAIのAPIを使って、自然言語からGitHubのデータを検索できるようになっています。今は英語ですが、日本語も通ります。

英語で検索すると、それに合わせて、結果にふさわしいグラフを、AIにどのグラフで見せたらいいかをお願いして、それに合わせたグラフを自動的に表示するようになっています。

やっていることは単純で、自然言語からSQLを生成して、それを実行して、結果に合わせて、聞いたことに対してふさわしいグラフを選んで表示しているだけです。

これは、私たちのデモですが、BIツールなどは普通にこうなります。2023年の初めから言っていて、ぜんぜんなっていないので、BIツールベンダーさん、もうちょっとがんばってくださいという感じですけど(笑)。

(会場笑)

やはり聞き方によってグラフの出し方も変わるので、わざわざ自分で「どのグラフを表示」とは選ばずに、例えば「Kubernetesのコントリビューターはどこが多いですか?」と言ったら世界地図、「トレンドを見たい」と言ったらこういう折れ線グラフが出てきます。

棒グラフの時もありますし、この後で出てきますが、「誰が一番コントリビュートしていますか?」と聞くと、パネルで表示してくれます。こういったことも全部AIの力によって自然言語を解析してやっています。こういうサイトです。

「OSS Insight」の特徴

このサイトの特徴としては、データボリュームがけっこう多いです。全部のデータを入れているので、12TBぐらいあります。そこのデータ量が多いということと、先ほど見ていただいたように、AIでSQLを生成しているのですが、これには1つ欠点があって、どんなSQLを吐かれるかがわからないんですね。

なので、効率がいいのか悪いのかがぜんぜんわからない。人が遅いSQLを書いたら「タコ」だの「アホ」だの言われると思うのですが、AIが書いているので、もう何が来るかわからない。

もう1つは、こういうサイトにはありがちで、ランキングサイトなどは特にそうだと思いますが、バズると大変です。

ゲームデベロッパーの人がもしいたらアレですが、実際「Unity」がビジネスモデルをつい最近変えました。それによってオープンソースのゲームエンジンのランキングはすごく変動したんですよ。

(スライドを示して)ここを見ていただくとわかるように、500パーセント上昇とかになっているんですね。「どういうことよ」というのを、うちの公式ボットがツイートしたら、そのインプレッションが206Kとかになってしまって、もうバンバンバンバン、リクエストが来ます。そういうことになってしまいました。トラフィックが死ぬほど増える。

TiDB Serverlessのいいところというのは、こういうバーストトラフィックに対して追随してくれるところなんですよ。わざわざ、「ヤバい、トラフィック来すぎた。サーバー増やさなきゃ」とやる必要がぜんぜんないです。勝手に増えます。

さらに、今までデータベースをお使いのみなさんは、よくご存じだと思いますが、ピークに合わせてデータベースは設計しないといけません。

当然OSS Insightもピークに合わせて設定していましたが、ピークってどれぐらい来るかわからないじゃないですか(笑)。「Hacker News」に載ってみないと、どれだけリクエストが来るかなんてわからないんですよね。

なので、過剰にインスタンスを取っていたわけです。それが、サーバーレスを使うことで72パーセント減りました。ほぼ3割になりました。さらに、後ほどご紹介するデベロッパーフレンドリーな機能によって、開発の生産性も非常に高くなっていますというのが結論です。

TiDB ServerlessはMySQL互換

ちょっとTiDB Serverlessの紹介をさせていただきたいと思います。TiDB Serverlessは、MySQL互換です。ポストグレス(PostgreSQL)のファンのみなさん、申し訳ございません。

(会場笑)

MySQLのみです。ちょっと説明していなかったかもしれませんが、実は私たち、MySQLのコードベースを一切使っていません。イチからフルスクラッチでGo言語とRustで作っています。

先ほどかなり無茶をしたと思うんですね。コンピューティングのところで、マイクロサービスを外に出したり、さまざまな工夫をしていますが、それはもう自分たちでやっているので、別に既存の互換性がどうのこうのとか、一切気にしていないんですよ。そういうメリットがあります。

ただ、アプリケーションエンジニアから見た時は、普通にMySQLです。ドライバーもOracleさんのを使いますし、ORMもMySQLのORMをそのまま提供できます。

リアルタイムにスケールアウトする

あと、先ほど見ていただいたように、リアルタイムにスケールアウトします。

TiDBはもともとスケーラビリティを売りにしていて、(スライドを示して)インドの最大手のEコマースのFlipkartさんがTiDBを使って、100万QPS出しましたという記事もありますが、それぐらいの規模のリクエストをさばくことができます。

「TiDB Serverless、どうなの?」というところで見ていただきたいのですが、これ、「Sysbench」で、ずっとどんどんどんどん上がっていく負荷をかけていて、そういうECサイトのピークをシミュレートしています。

ちょっと見にくいと思いますが、下にQPSが出ています。20分で130万まで、負荷をかけています。20分でそこまで出せます。

100万QPSって、普通のアプリケーションで使う領域じゃないんですよ(笑)。よほど流行っているゲームじゃないとこんなにいきません。普通は1万とかあればぜんぜん余裕だと思いますが、そのぐらいのQPSをカバーすることができます。

さらに使わない時は、この130万まで上げたQPSを14分で0に落とします。なので、35分で100万使って0まで落とす。もちろんお金はかかりますよ(笑)。これはタダではありませんが、とはいえ、何もしなくても、これぐらいのQPSをさばけます。全部サーバーレスの力だと思っていただければと思います。

2つのストレージエンジンを力業で両方同じシステムの中に持っている

もう1つおもしろい機能として、HTAPというのがあります。これはちょっと聞き慣れない言葉だと思いますが、みなさんたぶん、データ分析に「Redshift」や「BigQuery」を使っていると思います。それをするために「Glue」などを使って、わざわざデータを1つのデータベース、「Dynamo」とかからRedshiftに移していると思いますが、HTAPは、かなり力業的な発想です。

普通のデータベースだと分析クエリはなかなか難しい。でも、データウェアハウスはできるじゃないですか。というのは、データの持ち方が違うからです。普通のデータベースは、行指向で1行1行積み重ねるようなかたちでデータを持っています。

データウェアハウスは逆に、列指向、カラムナストレージとよく聞くと思いますが、列ごとに、データをばらして圧縮をかけて保存しています。なので、全行を読むような処理は、データウェアハウスのほうが一般に速いんです。

その間をつないでいたわけですが、「つなぐぐらいだったら一緒に持っちゃったらいいんじゃないの?」と。「中でつないでしまえば両方提供できるんじゃないか?」というのがHTAPのもともとの発想です。TiDBは、2つのストレージエンジンを力業で両方同じシステムの中に持っています。

普通のMySQLのデータベースだと、分析クエリ、GROUP BYとかをするような集計はけっこう時間がかかると思いますし、データをどんどん入れるとどんどん遅くなっていくと思いますが、TiDBの場合は、このHTAPという機能によって、それをかなり早くこなすことができます。Redshiftが中に入っているようなものだと思ってください。

実際、これは1つの例です。67倍速いみたいなことが書いてありますが、1秒以内でどんな分析クエリでも処理できるというパフォーマンスを持っています。

これも、サーバーレスで使えます。BigQueryはそうだと思いますが、レスポンスが早いサーバーレスデータウェアハウスはあまりないので、これも、TiDB Serverlessの売りの1つです。

使った分だけ課金する「Pay as you go」

あと、サーバーレスなので、「Pay as you go」です。使った分だけ課金しますというところで、2つの課金モデルになっています。少し複雑ですが、リクエスト依存のリクエスト数みたいな、リクエストユニットという課金と、使っているストレージ量の課金です。この2つですね。ほかは気にしなくていいです。どれぐらいのストレージを使っているか、どれぐらいのクエリを投げたかによって課金します。

このコンピューティング部分、リクエストユニット部分は、使っていなければお代は要らないですと。「最小限これぐらいコンピューティングリソースを割り当てなきゃいけないです」みたいな制限は、TiDB Serverlessにはありません。使わない時は、本当に払わなくていい。

先ほど無料で提供するというのがありましたが、Free Tierもあって、5GBと5万リクエストぐらいまでは無償で提供しています。

ChatGPTの機能をどこのデータベースベンダーよりも早く搭載

あと、本日はテーマとしてLLMの話があると思いますが、TiDB Serverlessには、ChatGPTの機能を、たぶんどこのデータベースベンダーよりも早く搭載しています。2023年の頭ぐらい入っています。

私たちは「Chat2Query」と呼んでいますが、自然言語で「こういうクエリを出したい」「こういうことを聞きたい」とやると、テーブル定義を考慮して適切なSQLを生成してくれます。

そういった機能のほかに、TiDB Serverless、TiDB Cloudのヘルプ自身もAIアシストということで、(スライドを示して)こちらに例があります。なにか調べようと思ったら、ドキュメントを検索するのがだいたいいつもだと思いますが、AIボットに聞くことができます。

こういったふうに、Chat2QueryなどのAIボットを通して、LLMの機能をユーザーに見えるかたちで、もうすでに提供しています。

さらに言うと、このChat2Queryという機能は、APIでも提供しています。なので、例えばユーザーが先ほどの我々のOSS Insightみたいなサイトを自分で作りたいと思ったら、「今月の売上、悪い原因は何ですか?」「今月の売上トップ10を営業店ごとに出してください」など任意のクエリを自然言語で入力して、API経由でこの機能を利用することができます。

デベロッパーフレンドリー

あと、デベロッパーリソースということで、非常にデベロッパーフレンドリーです。MySQL互換なので、もうすでに十分デベロッパーフレンドリーなのですが、それ以外にもさまざまな、例えば「VSCode」「DBeaver」「Terraform」なども使えますし、「Zapier」連携もあります。かなり強力なインテグレーション機能を持っています。

あと、ドキュメント。残念ながらMaxの資料なので、これは英語ですが、日本語のドキュメントもあります。ほかには、教育コンテンツですね。私も教育コンテンツを翻訳しています。そんな感じで、日本語のコンテンツも充実させています。

直接TiDB Serverlessを呼び出せる「Serverless Driver for Edge Computing」をリリース

ここで大ニュースです。今日は「ServerlessDays」ということで、先ほど「PlanetScale」がありました。みなさん、PlanetScaleしかないじゃんと思っているかもしれませんが、TiDB Serverlessもサーバーレスデータベースです。

実際に、「Vercel」とか「Cloudflare Workers」とか「Netlify」とかから使おうとするとTCPが通らないので、プロキシを通さないと使えなかったなど、今まではあると思うんですよね。

ですが、つい先日「Serverless Driver for Edge Computing」という機能を出しまして、こういったエッジアプリから、直接TiDB Serverlessを呼び出せるようになりました。

サンプルコードは簡単です。コネクションストリングでコネクトして、awaitがありますが、executeするだけ。それで、SQL文、「show tables」、SQLがショボいですが、ここにSQLを書いて実行するだけです。そうすると結果がJSONで返ってくる。

なので、こういったエッジコンピューティングのサービスを利用するのに、データベースはどうしようと悩む必要はもうありません。TiDB Serverlessを使っていただいてぜんぜん問題ないです。これを発表できることを個人的に非常にうれしく思っています。

スケールアウトするのでエンドポイントだけ気にすればいい

今ご紹介したTiDB Serverlessですが、すでにもう使えるサービスです。みなさんぜひ使ってください。実際に使っていただいている例で、今日特に取り上げたいのが、愛知の社会福祉法人さんです。AJU自立の家というところで使っていただいています。

このNPO法人さんは、障がい者の方が社会で最も弱い立場の方のためにサービスを提供するというNPO法人です。なので、こういった各種のサイトのデータベースをTiDB Serverlessにしていただくというのも、全部自分たちでやられています。

そういったところでTiDB Serverlessを使うのは非常に簡単です。スケールアウトするので、エンドポイントしか気にする必要がありません。

複雑なデータベースの知識などは一切必要なしです。「WordPress」で今MySQLを使っているんだけど、それをTiDB Serverlessに置き換えるというのもできます。普通にできちゃいます。

さらに、コストパフォーマンスがいいです。今、AJUさんでやっていただいているいくつかの、けっこう社会的に重要なホームページがあります。とはいえ、そんなにアクセス数が多いわけでもなく、「維持をするのは大事なんだけども、維持費は、じゃあ、誰が出してくれるんですか?」という点で困るようなサイトで、TiDB Serverlessを活用していただいています。

デベロッパーに無料でTiDB Serverlessを配るという、私たちの最初のモチベーションから、実際にそれが実際に社会的なインパクトを生むようなところで使っていただけているというのは、非常にうれしいと思います。

楽しくなかったらサーバーレスじゃない

ちょっと見にくいと思いますが、AJUさん、ここにすごくいいキャッチフレーズが出ています。「楽しくなければ福祉じゃない!」。今日来ていただいたみなさんにまさに言いたいです。楽しくなかったらサーバーレスじゃないんですよ。

本当にそうだと思いますが、今聞いていただいた話、僕らソリューションアーキテクト、PingCAPの中の開発者もそうですが、サーバーレスは正直めっちゃ楽しいですよ(笑)。

やはりいろいろ工夫をしなければいけないというのはありますが、それに見合う楽しさがあります。もちろん安く提供するとか、いいアーキテクチャを提供するとか、いろんな狙いはあると思いますが、やはり何をやっているかというと、楽しさですよね。

特にMaxには、「この楽しさをしゃべれ」と言われていますが(笑)、本当にそうだと思います。みなさん、楽しくてたぶん今日来ていると思います。これから午後のセッションもいろいろありますが、ServerlessDaysを楽しんでいきましょう。

だいぶ早く終わっちゃった感じですね。50分は長いなと思いますが、以上で私たちPingCAP、TiDB Serverlessのセッションを終わろうと思います。

簡単なリキャップとしては、みなさんがサーバーレスでなにかアプリケーションを作ろうと思った時に、作る過程のさまざまな工夫という点で非常に参考になる部分があったのではないかなと思っています。

ちょっと言い忘れていましたが、全部「EKS」上で動いています。コンテナサービスです。

そういったAWSの使い方なんかも参考になるところがあったのではないかなと思います。今日初めてTiDBを知ったという方は、ぜひ左側のQRコードからサインアップしてください。クレジットカードなど一切不要で使えますし、先ほど見ていただいたChat2Queryですね。自然言語からSQLを生成するというのもすぐに使うことができます。

Maxは日本のみなさんに会うのを非常に楽しみにしていたので、登壇できずに非常に残念ですということで、私が代わりに説明させていただきましたが、みなさんの参考になっていたら幸いです。午後も含めてServerlessDaysを楽しんでいきましょう。以上です。

(会場拍手)