なぜ、もう一つの Postgres コンネクションプーラーを作ったのか

2026/07/08 0:36

なぜ、もう一つの Postgres コンネクションプーラーを作ったのか

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

2026年7月6日、PgDog は、PostgreSQL クライアントプーリングツール(PgBouncer、RDS Proxy、Pgpool-II、Supavisor など)に内在する「漏洩的抽象化」の課題を解決するための革新的なオープンソースプロキシを導入しました。従来のプーラーは、セッション状態の漏洩(例:

SET
コマンドが他のクライアントに影響を与えること)を引き起こしたり、-row レベルセキュリティやトランザクショナルな LISTEN/NOTIFY コマンドといった重要な機能を無効化を強制する必要がある場合があり、これには侵入的なアプリケーションコードの変更を必要とします。

一方、async Tokio ワーカーを採用した Rust アーキテクチャに基づく PgDog は、クライアントの状態を厳密に独立して維持します。これは、組み込みの SQL パーサーを利用し、クエリのパイプライン化を通じてシングルラウンドトリップ内でクライアントとサーバー間のセッション状態の不整合を自動的に検出・修正することにより実現されます。これにより、RLS や LISTEN/NOTIFY セマンティクスなどの高度な機能を損なわずに性能を維持することが可能になります。マルチスレッドワーカーを採用し、各クライアントが専用の非同期タスクで処理されるため、PgDog は接続数に対して線形にスケールし、プーリングのシャーディング化や特定のインスタンスへのクライアント固定を回避します。

現在、2 億回以上のクエリ/秒を処理しており、突発的なトラフィック増加中に完全なデータベース性能を実現を求める組織向けに、堅牢な代替手段を提供しています。Linux カーネルまたは AWS RDS の制約に依存する複雑なインフラ構成とは異なり、PgDog はマルチスレッドプロセスで制御を統合し、必要なメトリックやヘルスチェックの数を削減することで、コード変更なしですべて無料でどこでもデプロイ可能なソリューションを提供します。

本文

PgDog: PostgreSQL スケーリングのための次世代プロキシツール

2026 年 7 月 6 日現在、PostgreSQL(以下、Postgres)のスケーリングを支援する新しいプロキシツール「PgDog」が登場しました。既存の解決策には不備がありましたが、PgDog はそれらを克服し、より効率的な接続プーリングを実現します。

1. なぜ PgDog を開発したのか?:「漏れのある抽象化」との戦い

Postgres エコシステムには、「UNIX の哲学」(一つのことでよく行う)を掲げる信頼性の高いツールが多く存在します。代表的なものとしては以下のものがあります。

  • PgBouncer: 最も広く愛用されている接続プーラ
  • RDS Proxy: AWS RDS 向けのプロキシ
  • Pgpool-II: プール機能を持つデータベース管理システム
  • Supavisor: スーパーバイザ機能を含むツール

これらのツールは「機能する(Works)」点で優れた実装ですが、業界用語で**「漏れのある抽象化(Leaky Abstractions)」**の問題を抱えています。

既存ツールがもたらす妥協とリスク

  • アプリケーションコードの変更が必要: インフラとして PgBouncer などを追加すると、データベースへの接続方法や運用邏輯を変更させられます。
  • 実装コストの増加: アプリケーション開発に長い期間を要するケースでは、数千行に及ぶ本番環境のコードを改修する必要があり、テストカバレッジが極めて低下します。
  • SET 命令の不具合: 接続プーラはクライアント間での接続リユースを行うため、片方のクライアントで設定したセッション状態(例:
    SET
    命令による一時オーバーライド)が他のクライアントへ「漏れ」てしまいます。

PgDog のアプローチ

これらの問題はもはや必要ありません。PgDog は以下のメカニズムにより、既存の Postgres 機能を制限せずともスケーリングを実現します。

2. セッション状態(Connection State)の完全制御

Postgres においては、クエリパフォーマンス向上やセキュリティ設定のために**

SET
命令**を頻繁に使用します。

-- スロークエリ用のタイムアウト設定例
SET statement_timeout TO '5m'; 
SELECT * FROM users WHERE banned IS true;

既存ツールの限界

接続プーラがセッション状態を共有する際、以下の深刻なリスクが生じます。

  • スロークエリの連鎖: あるクライアントで長時間実行されるクエリが、他のクライアントのタイムアウト設定に影響を与え、データベース全体への負荷イベントを引き起こす可能性があります。
  • RLS(行レベルセキュリティ)の機能不全: セッション変数に依存する RLS ポリシーが誤作動し、必要な行が沈黙して消失してしまう最悪のケースが発生します。

そのため、過去には接続プーリングへ移行する際の一般的なアドバイスとして**「

SET
命令を使用しないこと」**が推奨されていました。これは機能を制限せざるを得ない妥協策でした。

PgDog の解決策

PgDog は組み込み SQL パーサを内蔵し、

SET
ステートメントを自動的に処理します。

  1. 自動検出と保存: クエリの中から
    SET
    ステートメントを検出し、変数名と値を抽出して各クライアント接続でプロキシ側に保持します。
  2. 動的同期: クライアントがクエリを実行する際、サーバーの状態とプロキシの持つ状態が一致するか確認します。
  3. 自動更新: 不一致の場合、一連の
    SET
    ステートメントを実行して即時に状態を同期させます。
  • 高パフォーマンス検出アルゴリズム: 複数の変数が異なる場合でも、ワンラウンドトリップで全更新を実現するためのクエリパイプラインング(Query Pipelining)技術を採用しています。
  • 成果: パフォーマンスへの影響を最小限に抑えつつ、Postgres の本機能(RLS など)を継続利用できます。

3. LISTEN / NOTIFY 命令の実装

PostgreSQL が提供する公開・購読(Publish/Subscribe)機能である

LISTEN
NOTIFY
は、追加データベースなしで動作する強力な仕組みです。

課題と解決

従来のプーラでは、特にトランザクションモード使用时にこの機能をサポートできなかったため、多くの開発者が SQS や Redis への移行を検討していました(PostgreSQL 10 がリリースされた 2017 年以降の開発で重要視される機能)。

PgDog はこれを内部で完全に実装しました。

  • ブローカーとしての振る舞い: クライアントにとって PgDog がブローカーのように見えますが、バックエンドでは元の Postgres を使用しています。
  • プロセス間通信: 複数の PgDog プロセス(通常は複数コンテナ)で動作する場合も、専用の接続を通じてすべてのメッセージを Postgres に転送します。
    • 同じプロセス内: Tokio のブロードキャストチャネルを使用。
    • 異なるプロセス間: 専用接続経由での送信。

これは、Pub/Sub クライアントとして機能しつつ、他のクライアントもプロキシ化し、Postgres をブローカーとして再利用する、クリエイティブなエンジニアリングの事例です。

  • トランザクションセマンティクスの保持: 友人たちのデータベースダウンを引き起こした過去の課題に対し、トランザクション的な性質を厳格に守るよう修正を加えています。

4. マルチスレッド(Multithreading)による拡張性

PgDog は Rust の非同時ランタイムであるTokioをベースに構築されており、マルチスレッドワーカーを搭載しています。

アーキテクチャの特徴

  • クライアントごとの独立処理: 各クライアントは独自の非同時タスクで処理され、接続数と線形にスケーリングします。
  • CPU コアの活用: 複数のコアを同時に使用するため、1 つのプロセスからより多くのクエリを毎秒処理可能になります。

なぜマルチスレッドが重要なのか?

既存ツールとの比較により、その必要性が明確になります。

機能PgBouncer / RDS ProxyPgDog (マルチスレッド)
シャーディング必須: プロキシごとに専用接続セットが必要。過負荷時の影響が全体に及ぶリスクあり。不要: 柔軟な分散処理が可能。
トラフィック処理リソース制限によりボトルネックになりやすい。はるかに多くのトラフィックを処理可能。
スケーリング効率サーバー接続数が増えるが、クライアント密度が低い。少ない接続数で多くのクライアントをプーリング可能。
急増負荷への対応自動スケーリング待ちが発生しやすく、レイテンシ増加リスクあり。瞬時に対処可能。SLA(サービスレベル契約)を守れる。

運用面でのメリット

  • 複雑性の低下: マルチスレッドプロセスの管理ランブックが簡潔になります。
  • 一元管理: 計測指標やヘルスチェックのソースが単一となり、Linux カーネルや AWS RDS コントロールプレーンなどのデバッグ困難な領域への依存を減らせます。

5. 結論

20 年以上にわたり存在してきた PgBouncer を置き換えるのは容易ではありませんが、PgDog は「あるべき姿」において不備を修正したツールです。

  • 実績: 現在から 1 年以上前から本番環境で稼働中。毎秒 200 万件のクエリに対する接続プーリングに成功しています。
  • オープンソース: 使用・改変の自由を含むライセンスであり、コードは無料で公開されています。
  • 柔軟なデプロイ: 任意の環境に導入可能で、既存の Postgres インフラを破壊せず、スケーリングのための機能を「通り越してスムーズに動作」させます。

PgDog は、Postgres の機能制限を強要することなく、マルチスレッド技術と高度な SQL パーシングにより、現代的なスケーリング要件を満たすための最適解となります。

同じ日のほかのニュース

一覧に戻る →

2026/07/08 3:24

Kokoro を活用したローカル動作・CPU対応で高品質な TTS(テキスト対話)

## Japanese Translation: 2026 年 3 月 31 日にリリースされた Kokoro-82M は、わずか 8200 万パラメータだけで英語・中国語・ヒンディー語の極めてリアルな声を生成する特段に軽量な Text-to-Speech モデルです。CPU 上で完結するように設計されており、高価な GPU の依存を回避できます(GPU はローカルの LLL推論用に留保されます)。同モデルは AMD Ryzen チップを搭載した標準的なプロセッサ、Intel Core i7 システム、Apple M シリーズ CPU にもデプロイ可能です。ベンチマーク結果では、各種ハードウェア上で合成時間が 5 秒以内となっています:Intel Core i7-4770K で約 4.7 秒、Apple M2 Pro で 4.5 秒、短かい段落では AMD Ryzen 7 8745HS で低至くとも 1.5 秒です。 最も簡単なデプロイ方法では、プリダウンロード済みの音声モデルを含む Kokoro-FastAPI コンテナイメージ(約 5 GB)を使用します。ユーザーは `podman run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu` コマンドで Podman を使用してサービスを開始し、`localhost:8880/web` でウェブ UI にアクセスすることで、オーディオを直接生成・再生できます。コンテナは OpenAI 互換の音声 API を公開しており、JavaScript(`./speak.js`)および Python(`./speak.py`)スクリプトなどの実装例があります。音声モデルは環境変数 `TTS_VOICE` を使用して選択でき(全リストは HuggingFace で確認可能)、出力は MP3 ファイルとして保存され、SoX がインストールされている場合は自動再生も可能です。 音声認識と Text-to-Speech の両方が必要なアプリケーション向けには、オプションの Speaches コンテナ化サービスが Whisper とシームレスに統合され、また OpenAI API 互換性もサポートしています。リソース要求を低く抑えつつ、簡潔なデプロイオプションを提供することで、Kokoro-82M は自然で多言語の音声合成を開発者のワークフローや広範なアプリケーションに統合するためのハードルを大幅に低下させます。

2026/07/07 21:38

StreetComplete:1 つの小さなクエストで OpenStreetMap を修正していくプロジェクト

## Japanese Translation: StreetComplete は、誰でも現在地から OpenStreetMap の精度を向上させるシンプルな方法を提供します。アプリは生地図上に不足している情報を簡単な「クエスト」として表示し、利用者に特定の場所を訪れて短く質問に答えるよう促し、データギャップを埋めます。このアプローチにより、高度な編集スキルや専用ソフトがなくても OpenStreetMap が最新の状態を保つことができます。ユーザーがタスクを完了すると、その貢献は瞬時にグローバルデータベースで更新され、直ちにその名前でクレジットされます。このメカニズムにより、地図の改善は情報を収集した実際の観察者まで追跡可能になります。したがって、ナビゲーションや地域発見のためのストリートレベルの詳細はより正確かつ信頼性が高まります。究極的には、このツールはマッピングを民主化し、無関心な訪問者を能動的な貢献者に転換させます。これにより、遠隔編集や大規模な専門チームに依存することなく、簡単な現場での相互作用を通じて正確な地理データが継続的に拡張されるコミュニティが育まれます。

2026/07/07 23:23

Chat Control バージョン 1.0 と 2.0 の解説

## Japanese Translation: 欧州連合(EU)は、企業に対し、子供による性虐待資料(CSAM)を検出するために私信をスキャンすることを義務付ける有効期限を迎えた暫定権能(チャットコントロール 1.0,規制 EU 2021/1232)の復活を図ろうとしている。当初 2024 年 8 月 3 日に有効期限が切れる予定だったこの措置は、2 回延期された——最初に 2026 年 4 月 3 日(2024 年 4 月 29 日の議決)、続いてさらに 2028 年 4 月まで(2025 年 12 月 18 日の提案)。2026 年 3 月 26 日、下院での投票で改正案 34 が否決されず、その一方で不特定の写真やテキストの自動評価を禁止する改正案 34 が僅差(307 対 306)で可決されたことを受け、無効化措置に基づく自発的スキャンの法的根拠は 2026 年 4 月 4 日に終了した。にもかかわらず、主要プラットフォーム(Google、Meta、Microsoft、Snap)は自発的に引き続きスキャンを行うと発表した。 しかし、立法上の行き違いが生じている:欧州議会の LIBE 委員会は 2026 年 3 月 2 日に延期を拒否し、欧州議会は 2026 年 3 月 11 日、広範な自動分析に対する保護性指令を採用し、理事会は同年 3 月中旬に欧州議会の条件を拒否した。これに対し、EU の大使たちは 2026 年 6 月 26 日に手続の簡素化を通じて暫定復活を推進することに合意し、理事会は同年 7 月 2 日にも自らの立場を採用した。2026 年 7 月 7 日、欧州議会は緊急手続を承認するため 331 対 303 の投票を行い、その際に関連する委員会を bypass して、有効期限を迎えた特別措置を迅速処理する手続きをとった。この議題に対する法的拘束力のある投票は木曜日(7 月 9 日)に予定されており、絶対多数である 361 人の欧州議会議員の賛成が必要となる。 同時に、「チャットコントロール 2.0」と呼ばれる恒久解決策を確立するための努力も停滞している。委員会は 2022 年 5 月 11 日、プラットフォームに対し暗号化全体(エンドツーエンド)を迂回して検出と報告を行うことを求める恒久規制を提案した。2023 年 11 月、欧州議会は E2E スキャンに反対する保護性指令を採用し、視覚情報のみを対象とした分析、特定の裁判所命令の要件のみを受け入れること、また年齢認証の義務化を拒否することを要請した。2025 年 12 月から 2026 年 5 月までの 4回のトリログ(三回協議)ラウンドに加えて、2026 年 6 月 29 日の「最終」ラウンドも失敗に終わったが、チャットコントロール 2.0 に関する合意は依然として達されていない。 2026 年 6 月 10 日、理事会の法務部は、裁判所の承認なしに行われる自発的スキャンは、EU 基本権憲章第 7 条(プライバシーとデータ保護)に抵触する一般化されたスキャンであるとして警告した。恒久 CSA 規制について 5回のトリログラウンドが完了後なお合意に至らず、2025 年 10 月にドイツの議長国としての任務でリスク評価と軽減義務への重点が移行している状況において、EU は児童安全の強化とデジタル権限の維持という狭いバランスを navigate しなければならない。7 月 9 日の緊急投票は、国家関連のスキャン手続に議論を伴う形で再び導入することを強いるリスクがあり、これにより憲法上の保護や公共の信頼に関連する新たな法的課題が引き起こされる可能性がある。