>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
Rust

PostgresをRustで書き直す理由

クラシックカーのエンジンを作り直すことを決意したとします。しかし、元の部品の代わりにチタンで3Dプリントした部品を使うとします。pgrustプロジェクトがまさにそれに近いことをしています。開発者たちはPostgres 18.3を取り上げ、内部構造をRustで体系的に書き直し始めたのです。

狂気や学生実験のように聞こえるかもしれませんが、数字は別のことを物語っています。このプロジェクトは元のPostgresから46,000以上の回帰テストをパスしています。これは「データベースに触発された」程度のものではなく、同じデータファイル、同じクエリを理解するバイナリ互換の代替品を作ろうという試みです。

このプロジェクトとは

pgrustはPostgreSQLコアの完全なオーバーホールです。著者malisperの主な考えは、何十年にもわたって元のPostgres Cコードがラディカルな変更には複雑になりすぎたということです。マルチスレッドや新しいストレージ機構をそこで実装することは、メーリングリストでの議論に何年もかかるタスクです。

Rustはここでは単なる「安全な言語」としてではなく、高速なイテレーションのためのツールとして機能しています。開発者は移植を高速化するためにAIアシスタントを使用しますが、Postgresのリファレンステストを通じて結果を厳密にコントロールしています。元のデータベースが不正なSQLクエリでエラーをスローする場合、pgrustも全く同じエラーをスローする必要があります。

pgrustが元のバージョンとどう違うか

最も興味深い部分は、計画とすでに実装されたプロトタイプにあります。READMEにはまだ一般公開されていない新バージョンが記載されていますが、その結果は興味深いものです。

pgbouncerやその他のプロキシの使用を強制する古典的な「接続毎プロセス」モデル 대신、pgrustはスレッドに移行しています。これにより、トランザクションワークロードで即座に巨大なブーストが得られます。著者らの測定によると、このアーキテクチャは元のバージョンより50%高速に動作します。

分析用途では、数字はさらに大胆です:300倍の高速化が主張されています。開発者は、おなじみのPostgresインターフェースを維持しながらClickhouseレベルのパフォーマンスを目指しています。

技術的詳細と互換性

このプロジェクトはディスク互換性を維持しています。既存のPostgres 18.3のデータディレクトリを取り出してpgrustで「指し示す」ことができます。ファイルを選択して動作を開始します。

ソースからビルドするには、Postgresで作業するための標準的なツールセットが必要です:icu4copenssllibpq。プロセスはRust開発者にとって馴染み深いものです:

PGRUST_PGSHAREDIR="$PWD/vendor/postgres-18.3/share" \
cargo build --release --locked --bin postgres

興味深い詳細として、起動時にはスタックリミットを手動で上げる必要があること(ulimit -s 65520)です。なぜなら一部のPostgres操作はスタック上で非常にメモリ集約的であり、Rustランタイムはデフォルトでより控えめに動作するからです。

今後のロードマップ

プロジェクトのロードマップは、すべてのデータベース管理者の願いリストのように見えます:

  • 組み込みの接続プール(さようなら、pgbouncer)
  • Vacuumなしのストレージ実験。これが実装できれば、pgrustはPostgresの最も「痛い」問題の1つを解決します
  • 悪いクエリへのガードレール。ニューラルネットワークがインデックスや実行プランをあまり気にせずにSQLを生成することが多い今、特に重要です
  • 高速なデータブランチング

試す価値はあるか

現時点では、pgrustは本番対応ではありません。著者自身がこれを正直に認めています。PL/PythonやPL/Tclなどの拡張機能はまだサポートされておらず、パブリックブランチのパフォーマンスはまだ完全に最適化されていません。

しかし、これは実験に最適なプレイグラウンドです。DBMSの内部構造を覗いてみたいけれど、大規模なCコードベースに尻込みしていた人は、pgrustがチャンスです。Rustコードは読みやすく変更しやすいことが桁違いに優れています。

以下の単一コマンドでDockerからプロジェクトを試すことができます:

docker run -d --name pgrust -e POSTGRES_PASSWORD=secret malisper/pgrust:v0.1

これによりpgrustを含むコンテナが起動し、標準的なpsqlが開きます。何かをダウンロードしたくない人のために、公式サイトでWebAssemblyで動作するデモがあり、ブラウザ内で動作します。

このプロジェクトは最近のオープンソースで最も野心的な挑戦の1つに見えます。たとえpgrustが来年以内にPostgresを置き換えるなくても、最終的にはメインブランチ(「象」)に移行する可能性のある技術のテストベッドになるのは確実です。

関連プロジェクト