8月11日、DatabricksがStas Kelvich、Yan Leshinsky、Nikita Shamgunov、Reynold Xinの共著で「Electric joins Databricks to bring WASM Postgres to AI agent sandboxes」と題した記事を公開した。ElectricがDatabricksに合流し、WebAssembly(WASM)上で動作する軽量Postgres「PGlite」をAIエージェントのサンドボックス基盤に統合する取り組みを発表したものだ。
PGliteの週あたりダウンロード数は過去12ヶ月で100万から1300万へと急成長している。この数字が示すのは、「ブラウザやサンドボックスの中でPostgresを直接動かしたい」という需要が、AIエージェントの普及とともに一気に顕在化しつつあるということだ。
なぜエージェントに「ローカルDB」が必要か
AIエージェント開発において、データベースの「置き場所」が課題になっている。従来のWebアプリならクラウド上のマネージドPostgresで事足りるが、エージェントはそうではない。エージェントは1秒に数回のペースで次の行動を決め、コンテキストを更新する。そのたびにネットワーク越しにDBへクエリを投げるのは遅すぎる。
記事ではエージェントが従来のアプリと根本的に異なる点として3つを挙げている:
- 実行時にデータを決定する:クエリが事前に決まっておらず、コンテキストも高速に変化するため、データは同一プロセス内に置きたい
- どこでも動く:サンドボックス環境ではクラウドDBへのアクセスがネットワーク経由に限られる
- 複数が協調して動く:エージェントが並列で動く場合、重複作業を避け、互いに整合した状態を保つ必要がある
WASMでPostgresをエージェントの中に入れる
Electricはこの課題をPGliteで解決する。PGliteはWASM(WebAssembly)上で動くPostgresで、エージェントのサンドボックス、ブラウザのタブ、ユーザーのデバイス上で直接起動できる。別途サーバーを立てる必要はない。WASMを採用している理由はポータビリティにある。WASMはブラウザ・サーバー・エッジを問わず同一バイナリで動作する仕様のため、Postgresというヘビーなランタイムをサンドボックスに閉じ込めることが初めて現実的になった。
ただしPGliteだけでは半分の解決策にとどまる。複数エージェントが並列で動く場合、互いの状態を把握しなければ矛盾が生じる。
ローカル実行+リアルタイム同期のアーキテクチャ
Electricはこのためにリアルタイム同期エンジンを組み合わせる。分散したエージェントとクラウド上の**Lakebase**(DatabricksのマネージドPostgres)の間でデータを継続的に同期し、各エージェントがローカルの高速コンテキストを持ちながら、中央の最新状態とも整合性を保つ構成だ。記事ではこのアーキテクチャを「Google Docs、Figma、Notionのようなコラボレーティブアプリを支えているものと同じ」と説明している。
構成を整理すると:
- PGlite:エージェントのサンドボックス内で動くWASM Postgres
- Electricの同期エンジン:分散エージェントとLakebase間のリアルタイム同期レイヤー
- Lakebase:オブジェクトストレージ上で動くプロダクションスケールのPostgres
この構成により開発者は、単一のPostgres標準でエージェントアプリケーションを構築しつつ、サンドボックス内の低レイテンシ実行とエージェントチーム間のリアルタイムなコンテキスト共有を両立できるとされる。
PGliteの出自:NeonからElectric、そしてDatabricksへ
PGliteの経緯も興味深い。WASM上でPostgresを動かすプルーフオブコンセプトをもともと作ったのは、サーバーレスPostgresサービスNeonの共同創業者であるStas Kelvich氏だ。ElectricはそのPoCを引き取り、本番対応のエンベダブルPostgresへと育て上げた独立したOSSプロジェクトである。今回Kelvich氏はDatabricksブログの著者の一人として名を連ねており、Neonも同日に関連ブログを公開している。一つのアイデアが複数の組織を経て統合されていく過程が、この発表に凝縮されている。
なお、ElectricのソースコードはGitHub上でオープンソースとして公開されており、PGliteと組み合わせた実装例も確認できる。
詳細はElectric joins Databricks to bring WASM Postgres to AI agent sandboxesを参照していただきたい。