ニュース

PlanetScaleのNekiが本物のPostgresにシャーディングをもたらす

Nekiは、ただの素のPostgresであるシャードの前にPostgresワイヤプロトコルのルーターを置く。だからドライバーもORMもそのまま動く。プラットフォームプレビューであり、PlanetScaleはまだ本番で動かすなと言っている。

September 10, 2026· 1 min read
PlanetScaleのNekiが本物のPostgresにシャーディングをもたらす

PlanetScaleはNekiをプラットフォームプレビューとしてローンチした。シャード化されたPostgresであり、すべてのシャードは未改変のPostgresクラスタだ。売り文句は狭く具体的だ — 本物のPostgresのセマンティクス、拡張機能、SQLの挙動をそのまま維持し、より大きなマシンを買うのではなくシャードを追加することで水平スケールする。

同社はこれを、PlanetScale Postgresの顧客で繰り返しぶつかってきた問題への答えとして位置づける。チームは単一マシンの余力を食いつぶし、既存の逃げ道はどれも何かを犠牲にする。アプリケーションレベルのシャーディングはルーティングロジックをコードに押し込む。Postgres互換の分散データベースはシャードキーを隠し、拡張機能のサポートを落とし、デバッグしにくいレイテンシを加える。Nekiの賭けは、Postgresワイヤプロトコルを話すルーターならその両方を避けられるというものだ。

アーキテクチャ: 4つの可動部

アプリケーションは標準のPostgresワイヤプロトコルで、単一の接続文字列を使ってNekiルーターに接続する。ルーターは完全なPostgresクエリパーサーと分散クエリプランナーを備える。クエリをパースし、どのシャードが実行すべきかを決め、作業をディスパッチし、結果を1つのストリームにマージする。ルーターは垂直にも水平にもスケールするので、ルーター層自体が固定のボトルネックになるようにはなっていない。

ルーターの背後にあるシャードは完全なPostgresクラスタだ — 1つのプライマリと、3つのアベイラビリティゾーンに分散した少なくとも2つのレプリカ。カスタムストレージエンジンは存在しない。シャードはシャードグループにまとめられ、これにより異なるテーブルやワークロードを別々のシャードセットに置ける。各グループはインスタンスサイズ、レプリカ数、ストレージ、Postgresパラメータ、拡張機能をカバーする独自の設定プロファイルを持つ。

コネクションプーリングはすべてのPostgresインスタンスの隣でサイドカーとして動く。PlanetScaleがデータベースの前にPgBouncerを置くより意味のある改善だと主張するのはこの部分だ。Nekiが接続の両端を握っているため、プロセスの外から推定するのではなく、インスタンスが実際にさばける量に合わせてプールをサイジングできる。

コントロールプレーンはノードの健全性を追跡し、計画的なスイッチオーバーと計画外のフェイルオーバーを実行し、リシャーディング、スキーマ変更、バージョンアップグレードのワークフローを調整する。これらを束ねるのがデータトポロジーだ。論理テーブルを物理シャードにマッピングするJSON設定である。シャードインデックス — Nekiがルーティングに使うカラムとその値のハッシュ方法 — を定義し、さらにテーブルセットがいくつのシャードにまたがるかを制御するシャードグループを定義する。ルーターはトポロジーをキャッシュし、プランのたびに参照する。

オンライン操作と、シャード化しない入口

通常ならメンテナンスウィンドウを意味する作業が、組み込みワークフローとして動く。ターゲットノードのプロビジョニング、レプリケーションによる追いつき、__nekiメタファンクションを通じたトラフィックの切り替え、古いノードの退役 — すべてアプリが使うのと同じpsql接続越しに行われる。このモデルはスキーマ変更、バージョンアップグレード、フェイルオーバー、インポート、リシャーディングをカバーする。

初日からシャード化する必要はない。Nekiは単一プライマリとレプリカとして動き、改善されたプーリング、オンラインDDL、ゼロダウンタイムアップグレード、ヘルスモニタリングを最初から提供する。後からのリシャーディングは、すでに持っているクラスタに対するワークフローだ。Insights、スキーマ推奨、ブランチング、MCPといったPlanetScaleの機能も付いてくる。

プレビューの但し書き

これはプラットフォームプレビューであり、PlanetScaleは明言している。本番ワークロードで動かすな。製品はまだ変化しており、一部の変更は破壊的になる。フィードバックはサポートチケットかDiscordを通じて行う。

Nekiの賭けのすべては、水平スケールと本物のPostgresのどちらかを選ばなくていいはずだという点にある。真剣に受け止めるべきはプレビューというラベルの方だ。
Manul X 編集部
Nekiのコンポーネントとそれぞれの役割
比較
コンポーネント役割スケーリングモデル
Nekiルータークエリをパースし、シャードをまたいでプランし、結果をマージする。Postgresワイヤプロトコルを話す垂直および水平
シャード完全なPostgresクラスタ: 3つのAZにまたがる1プライマリ、少なくとも2レプリカシャードを追加
シャードグループテーブル/ワークロードを独自のシャードセットにまとめ、グループごとの設定プロファイルを持たせるグループごとのサイジング
コネクションプーリングサイドカー外部から推定するのではなく、各Postgresインスタンスの内側からプールをサイジングするインスタンスごと
コントロールプレーンヘルス追跡、スイッチオーバー、フェイルオーバー、リシャーディングとアップグレードのワークフローマネージド
データトポロジー論理テーブルを物理シャードとシャードインデックスにマッピングするJSONルーターがキャッシュ