データベース・バックエンド

【朗報】Postgresの「LISTEN/NOTIFY」は秒間5万件でも余裕でスケールする!「Redis/RabbitMQ不要論」「PgBouncer注意点」「Postgres万能説」

投稿日時: 2026/07/25 04:05

■ 概要・編集部サマリー

1. 【背景・DBOSによるスケーラビリティ検証】分散開発OSチーム「DBOS」の技術ブログにて、PostgreSQLに標準搭載されているPub/Sub機能「LISTEN / NOTIFY」が数万並列クライアント環境でどのようにスケールするかを検証したベンチマーク結果が公開されました。 2. 【焦点・毎秒5万メッセージ到達と都市伝説の打破】「LISTEN/NOTIFYはパフォーマンスが低く大規模環境では使えない」という長年の業界都市伝説を覆し、適切なコネクション設計によりCPU・メモリ消費を極めて低く抑えたまま毎秒5万件超のリアルタイム通知を処理できる実証データが示されています。 3. 【評価・外部ミドルウェア削減とアーキテクチャ単純化】WebSocketリアルタイム配信のためにRedisやRabbitMQなどの外部メッセージブローカーをわざわざ追加導入せず、Postgres単体でシステムをシンプルに簡略化できる構成にスコア360超えの大称賛が集まっています。

■ 外部メッセージブローカー(Redis/RabbitMQ)を不要にするPostgres標準Pub/Sub

Redis Pub/Sub や RabbitMQ などの外部ミドルウェアをわざわざ追加導入せず、RDB単体でWebSocketsやリアルタイムバックエンド通知を実現する `LISTEN / NOTIFY` 機能の限界性能を詳しく検証しています。

「スケールしない」という長年の噂を破り、10,000並行クライアント接続時においても秒間50,000通の非同期メッセージ通知を低遅延で捌ける実測結果が提示されました。

■ PgBouncer接続プール制御と 8KB ペイロード最適化パターン

コネクションプールミドルウェアである PgBouncer 導入時における Transaction Pooling モードとの競合(LISTENセッション破棄問題)や、8,000バイトのNOTIFYペイロード上限に関する実践的アプローチを紐解いています。

通知メッセージ本体に巨大JSONを埋め込むのではなく、オブジェクトIDのみをNOTIFYで軽量送信し、受信側がSELECTクエリで同期するパターンを強く推奨しています。

■ システムアーキテクチャ単純化(Keep It Simple)の優位性

単一の PostgreSQL データベースにおいて、リレーショナルデータ保持、全文検索、ベクトル検索、およびリアルタイムPub/Subをすべて完結させる構成の凄みを提示しています。

分散インフラの構成要素を減らすことで、SREの運用保守コストと障害耐性を大幅に改善する設計パラダイムを力強く証明しました。

海外掲示板の反応・まとめ

編集部サマリー:

■ PostgresのLISTEN/NOTIFY機能のスケール検証記事。外部ブローカー不要でPub/Subを実現する検証データが議論されています。

名無しさん@Postgres信者:

『LISTEN/NOTIFYは重いから別でRedisやRabbitMQ立てろ』って言われてたの完全に都市伝説だった件w DBOSのベンチマークで1万並列クライアント・毎秒5万通のメッセージを余裕で捌いててワロタ。

名無しさん@バックエンドアーキテクト:

>>2 WebSocketのリアルタイム通知のためだけにRedis Pub/SubやRabbitMQ追加してインフラの障害ポイント増やすのめちゃくちゃ嫌だったから、この検証結果はマジで朗報だわ。

名無しさん@DBAベテラン:

>>3 ただしPgBouncer使ってる場合は注意な。Transaction PoolingモードにしてるとLISTENコネクションがセッション破棄されて動かなくなるから、Session Poolingにするか専用ポート空けないとハマるぞ。

名無しさん@NOTIFYハマり経験者:

>>4 あとNOTIFYのペイロードは8000バイト(8KB)の上限があるから、巨大なJSON直接送らずに `NOTIFY channel, 'id:12345'` ってIDだけ送って受け側がSELECTするのが定石。

名無しさん@Go言語開発者:

Goの `lib/pq` や `pgx` と組み合わせてLISTEN待ち受けるチャネル書くと、驚くほどメモリ消費少なくて綺麗なリアルタイムサーバー組めるぞ。

名無しさん@インフラシンプル派:

Postgres一つでリレーショナルデータも全文検索(pg_trgm)もベクトル検索(pgvector)もPub/Subもこなせるの、技術スタック簡略化の観点で勝者すぎる。

名無しさん@海外ニキ:

Hacker Newsでもスコア360超えてて『Postgresはスイスアーミーナイフの域を超えてブラックホールになりつつある』って大絶賛されてるぞ。

名無しさん@バックエンドアーキテクト:

外部ブローカー増やすと、デプロイや監視の監視対象が増えてSREの運用コストが跳ね上がるからね。

名無しさん@NOTIFYハマり経験者:

マルチノードのPostgresクラスタ(Patroni等)でプライマリがフェイルオーバーした時の再LISTEN処理だけ書いておけば実用上完璧。

名無しさん@海外ニキ:

『複雑なマイクロサービスを作って壊すより、1つの巨大なPostgresを正しく使い倒す方が幸せになれる』という深み。

名無しさん@DBAベテラン:

専用チャンネルごとにアクセス制御(GRANT)も設定できるからセキュリティ面でも強固。

名無しさん@インフラシンプル派:

Supabaseとかも裏側でPostgresのCDC(Change Data Capture)とLISTEN/NOTIFY使い倒してるから説得力あるわ。

名無しさん@Go言語開発者:

新しいプロダクト作る時はまずPostgres単体でどこまで行けるか試すのが2026年のベストプラクティスだな。

名無しさん@まとめ総括:

Postgres万能時代の証明。LISTEN/NOTIFYによるインフラ単純化の波に乗りたいな。