日本PostgreSQLユーザ会主催の「PostgreSQL Conference Japan 2017」をレポート
PostgreSQL「進化」の軌跡――誕生から20年を石井達夫氏が振り返る
2017年11月06日 11時00分更新
石井氏が注目する3つの新機能
2017年10月5日に、PostgreSQLの最新バージョン「PostgreSQL 10.0」がリリースされた。石井氏は、バージョン10.0および最近のバージョンで追加された新機能のうち、個人的に特に重要視しているものとして、「ストリーミングレプリケーションの改良」、「パラレルクエリ」、「論理レプリケーション」の3つを挙げた。
1つ目のストリーミングレプリケーションは、2010年リリースのバージョン9.0で初めてPostgreSQLに実装された。
1台のデータベースがクラッシュしたときにシステムを止めたくない、性能が必要になったときに1台のデータベースをスケールアップするのではなく複数台を束ねてスケールアップできるようにしたいなどのニーズから、PostgreSQLにレプリケーションやクラスタリングの機能があったらよいという議論はずいぶん前からあった。バージョン9.0より前は、SQL文を複数サーバーに投げることによるレプリケーション、更新トリガーを利用して更新差分を転送することでレプリケーションするなどの独自実装や、dblinkを使ったサードパーティー実装でレプリケーションを実現していたが、これらの手段は性能が出ない。加えて、すべてのデータオブジェクトがレプリケーションできるわけではないという共通の問題を抱えていた。
ストリーミングレプリケーションは、PostgreSQL本体に組み込まれたレプリケーション技術であり、オーバーヘッドが少なく、実用的にはほとんどすべてのオブジェクトをレプリケーションできる。その後もストリーミングレプリケーション機能は改良が続けられ、最新版では、スタンバイがプライマリに昇格する際にデータを失わない同期レプリケーション、レプリケーションの遅延と一貫性保証のコントロールができる機能(アプリケーションの特性により、プライマリでコミットされたデータがスタンバイに反映されるまでの時間と、プライマリとスタンバイのデータ一貫性のどちらを優先するかコントロールできる)が実装されている。
2つ目のパラレルクエリは、2016年リリースのPostgreSQL 9.6で追加された機能だ。PostgreSQLは誕生から長らく、1つのクエリを1つのプロセスで実行する仕様だった。パラレルクエリが登場したことでこれが根本的に変わり、1つの検索クエリがパラレルワーカーと呼ばれるプロセスで分担されるようになった。「あくまで検索のプロセスのみだが(更新などの他プロセスには適用されない)、十分なメモリとCPUがある環境では、検索クエリが劇的に早くなるケースがある」(石井氏)。
3つ目の論理レプリケーションは、最新のPostgreSQL 10.0で追加された機能。これは、データベースへの変更内容を論理的に後から操作できる形でログとして保存し、特定の変更だけ取り出せる仕組みだ。MySQLなどでは従来から実装されている。応用できるケースが広く、「例えば、マスターからスレーブ側へ特定のテーブルだけをレプリケーションする、異なるバージョン間のPostgreSQLデータベースでレプリケーションする(ストリーミングレプリケーションではできない)、複数のデータベースを1つに集約する、といったことが可能」(石井氏)。
PostgreSQLの将来への期待
最後に石井氏は、個人的な意見として(開発コミュニティの意向とは関係ないと前置きした上で)、PostgreSQLの将来への期待を述べた。
まず、PostgreSQL 10.0で論理レプリケーションが実装されたので、「この延長上で双方向レプリケーションが実現できるはず、是非つくってほしい」(石井氏)。また、現在は検索クエリにのみ対応しているパラレルクエリが更新処理までサポートすると嬉しいという。さらに、「複数ノードをまたがったパラレルクエリが実現されると、スケールアウトが可能になるので嬉しい。これはつまり、Postgres-XC(NTTなどが開発しているスケールアウト可能なPostgreSQLクラスタ)と同じことが、PostgreSQL本体で実現できるということだ」(石井氏)。
もう1つ、「(すでに開発が進行中の)スキーマ変数の機能が実現されれば、商用データベースからPostgreSQLへの移行が楽になる」と石井氏は説明する。スキーマ変数は、スキーマごとに独立した変数を定義できる機能だが、これが、商用データベースが採用するパッケージ変数の代替になるため、商用データベースからPostgreSQLへの移行が容易になるという。石井氏は、そのほかの小さな期待として、「PostgreSQLのマニュアルには、なぜか図がないので分かりづらい。図を入れてほしいと切実に思う」と述べていた。