見出し画像

#Heroku の発表に心踊っている今日この頃。Amazon Auroraとpgvectorの利用方法を考えてみた

Salesforce World Tour Tokyoの2Daysが終わった翌朝起きるとFacebookメッセンジャーに通知が入っていた。

ラスベガスよりre:Invent速報くれた山田さんに感謝

re:InventとはAWSがラスベガスで開催しているSalesforceで言うところのDreamforceのようなイベントで、Salesforceも色々な形でブース展開しているらしい(行きたいけどまだ行ったこと無い)
そんなラスベガスの現地から速報をもらったのでした。

Amazon Auroraについての期待値

38分あたりから紹介がスタートします。

Heroku Postgres on Amazon Auroraってなに?

ものすごくシンプルに言うとAWS上にAuroraというPostgresとMySQLに互換性を持つ、より高性能なDBです。パフォーマンスがPostgreSQLで最大3倍という点と、簡単に容量のスケーリングが出来るというのが気になる特徴。
より詳細についてはこちらを御覧ください

なんでパイロットに参加したの?

弊社リバネスナレッジでは、Heroku上にSlackアプリをデプロイして運用しています。
特に、今年作った生成AIアプリ「Party on Slack」はSlack上に生成AI(ChatGPT, Claude, stable diffusionなど)を召喚して活用するアプリなのですが、ユーザー数も5000名を超えて伸び続けています。
Slackでは多くのやり取りがなされ、その記録がデータベースに記録されるような仕組みになっています。
そんな中で、Party on Slackを使ったワークショップを行った際に、Heroku Postgresへのデータ入力がボトルネックとなり、処理待ちが発生。結果的にタイムアウトしてしまうという事例が出てきました。こちらについては現在は技術的に解決済みではあるのですが、将来的に同じような形でパフォーマンス問題がサービス提供に影響するということは有り得るなと考えていました。
今回Pilotの話を頂いた時に考えたのは、もし発表されているようなパフォーマンスを得ることが出来るのであれば、もうしばらくはDBの性能に悩む必要がなくなるだろうということ。それでお試しさせてもらったという訳です。

Pilotしてみてどうだったか

Heroku Postgresのデプロイはコマンドライン一行なので、とても簡単です。誰でもできる。

肝心なパフォーマンスについて

一緒に開発しているエンジニアの古泉と話しながらパフォーマンス評価をしていたのですが、あれ?今のDBとそんなにパフォーマンス変わらないんじゃない?という結果に落胆しました。
おかしいなと思って、一晩寝かせることにしたのですが、そもそもPilotで使えるランクがものすごく小さなものだけだったことに気付いたんですよね。
今の本番環境のHeroku PostgresはStandard-3というプランでまぁそれなりにお金かかってるんですよね。
それと、ものすごく安いプランで比較していたことに気付いたという訳です。
もちろんPilotだし、一つのテナントをほぼ専有状態での評価ということになるので、GAした際のパフォーマンスはそこまでは出ないとは思ってはいるのですが、それでも今よりは安めのプランに変更しても全然処理できてしまうのでは?という期待を持つことができました。

そんな素直な感想をフィードバックした所、re:Inventに取り上げていただくことになりました。というのが今回の顛末でございます。
そんな訳で、弊社は期待してますよ。

もう一つ。pgvectorについても書かせてくれ

最近のリリースで、Heroku Postgresはpgvectorという機能の提供をスタートしています。

pgvector

詳細についてはSalesforceのJonathanというイケメンがバッチリ日本語化してくれましたのでこちらを御覧ください

要するにPostgreSQLなんだけど、ベクトル検索ができちゃいますよという代物です。
先程我々は生成AIを使うアプリの開発をしてきたとお話しましたが、生成AIをやっているとベクトル検索というこれまであまり馴染みのなかった検索方式を良く利用します。
従来のキーワード検索と違って、情報をベクトル化しておいて、検索キーワードも同じくベクトル化することで距離の近い情報を取得するという仕組みなのですが、これがあると何がおいしいのか?というと検索キーワードがかちっとしたものを作れない場合でも検索結果を得ることができる訳です。
ChatGPTは学習した情報からしか情報を出力できない仕組みなのですが、そこに自社の情報を合わせて提供しておくことで、よりパーソナライズされた生成結果を得ることが出来るというやり方を世界中の人が模索している真っ最中ですが、そこで使われる検索の仕組みの一つがHeroku Postgresでも使えちゃうよというアップデートです。
控えめに言って神だと思う。
これまではPinecone等のベクトルサーチエンジンサービスにデータを格納して利用するということをやっていたのですが、そんなことしなくてもHeroku上でベクター検索が実装できてしまいます。素晴らしくないですか?

何に使うんだい?という話

弊社リバネスには様々な情報が集まっています。
例えば、サイエンスキャッスルという中高生の学会には、生徒たちの行ってきた研究についてのデータベースが眠ってるんですよね。
学校で行う研究は予算や時間が限られていたり、そもそも論文化されているわけではないので情報が体系的にまとまっている訳ではなかったりします。
生徒たちがやりたいと思った研究テーマについて、先行事例がないか。あるならどんなことまでチャレンジしてみたのかについて知っておくことで、より高度な研究に手が届くようになる。そんな世界が来るのです。
そこで、これらに関するサーチエンジンを開発し、サイエンスキャッスルの参加者にデモをしながらヒアリングをしてみたんですよね。そこで出てきた課題が、

生徒たちがうまく検索できないのではないか?

というものでした。これまでのキーワード検索を利用する場合、明確にキーワードがテキスト情報の中にのっている必要があります。しかし、知識としてキーワードを知らないばかりに、欲しい情報にたどり着けないのではないか?というのが一番多く聞いた懸念点だったようです。
ここまで読んだ皆さんはわかると思うのですが、そこで活躍する可能性があるのがpgvectorです。やりたいことについて書くことでその距離が近いであろう情報が出てくる可能性があります。
こちらについては実装を開始したばかりでまだ結果を伴っている訳ではないのですが、感覚的にはうまくワークするんじゃないかなーと思っています。
うまくいったら他のサービスにも適用することでもっとユーザー体験が良い仕組みを作ることができるだろうなと目論んでいます。楽しみだ!

まとめ

以上のようにHerokuから革新的なリリースがされています。
これまであまり動きがあるように見えなかったHerokuが活性化してきているのはユーザーとしても非常に心強いですし、今後ももっと最先端のニーズに対応してくれると嬉しいですね。

noteにはこれまでの経験を綴っていこうかと思います。サポートによって思い出すモチベーションが上がるかもしれない。いや、上がるはずです。