日本PostgreSQLユーザ会主催の「PostgreSQL Conference Japan 2017」をレポート
PostgreSQL「進化」の軌跡――誕生から20年を石井達夫氏が振り返る
2017年11月06日 11時00分更新
日本PostgreSQLユーザ会は11月3日、PostgreSQLの総合カンファレンス「PostgreSQL Conference Japan 2017」を開催した。最初に登壇したSRA OSS日本支社 取締役支社長の石井達夫氏は、リリースから20年以上にわたってコミュニティでの開発が継続しているPostgreSQLの歴史を振り返り、今後の進化の方向性を展望した。
PostgreSQL前夜
国内で人気が高く、今では小規模システムから大規模な基幹業務まで利用されているオープンソースのRDB管理システム「PostgreSQL」。その先祖は、カルフォルニア大学バークレー校で1986年~1994年まで開発されていた「Postgres」まで遡ることができる。
Postgresは、当時としては先進的なオブジェクト指向の考え方を取り入れており、現在のPostgreSQLにも実装されている抽象データ型、拡張可能な型システムを採用していた。ただし、問い合わせ言語はSQLではなく独自の「POSTQUEL」というもので、「SQLとは微妙に違っていた」(石井氏)。
そのほかPostgresのテクノロジーの特徴としては、「fast path」と「プログラミング言語中立」がある。「fast pathは現在もラージオブジェクトの実装で使われている技術。オブジェクト指向で設計すると各オブジェクトを操作する必要が頻繁に出てくる。そのたびにSQLを発行しているのと大変なので、バックエンドの関数を直接実行しようという考え方」(石井氏)。また、当時のデータベースは特定の言語と強く結びついていたところを、Postgresでは標準プロトコルに基づけばどのプログラミング言語でも使える仕様にしたところが先進的だった。
初期のPostgresの実装については、迷走とも言える試行錯誤が重ねられている。「普通のトランザクションログを使ったDBMSでは面白くないからという不純な動機で、トランザクションログなしの実装を採用した(追記型のテーブルとトランザクションステータスビットを格納したファイルのみ)。その結果、性能問題に悩まされた」(石井氏)。また、実装言語の選択においても、「C言語は(商用データベースにベースになっている)Ingresに使われているという理由でLispを採用したが、バッファマネージャをLispで記述するのが難しくてすぐに後悔したようだ」(石井氏)。その後、CとLispの併用に至ったがLispがメモリを消費しすぎる問題に直面し、結局、Lisp部分をすべてCに書き直している。
PostgresSQLの誕生
バークレー校のPostgresプロジェクト終了後の1994年、Andrew Yu氏とJolly Chan氏の2人が、Postgresの問い合わせ言語をPOSTQUELからSQLへ変更し、コードを洗練させた「Postgres 95」をリリース。ソースコードをインターネットで公開し、ラボでの開発からコミュニティでの開発に移行した。
そして、1997年1月にコミュニティから「PostgreSQL 6.0」が誕生する。初期バージョンを「6.0」にした背景には、「過去の資産を活用してその上に自分たちの成果を積み上げていくという、オープンソースの考え方があった」(石井氏)。
リリース当初のPostgreSQLは機能的に不足が多々あったが、バージョンアップを重ねて機能を継続的に追加している。まず、日本語が使えなかった問題はバージョン6.3でパッチを当てて対応、PL/pgSQL(SQL手続き言語)がなかった問題は6.4で対応した(当初はPL/pgTCLという当時流行っていた言語で代用していた)。その他、行ロックがない(6.5で対応)、MVCCがない(6.5で対応)、トランザクションログがない(7.1で対応)、Windowsで動かない(8.0で対応)など、「致命的ともいえる大きな問題」(石井氏)もコミュニティの努力で解決してきた。
例えば、MVCC(多版型同時実行制御)機能。それまでのPosgreSQLにはタイムトラベル機能(時刻を指定してデータベースを検索する機能)があったが、バージョン6.5でこの機能を大胆に削除して、これをMVCCの実装のフレームワークにした。これによって過去のデータがユーザーから見えなくなった(システムでは管理している)が、結果としてMVCCの実装は大成功だったと石井氏は言う。MVCCはリードとライドがブロックしないため、高いトランザクション並列性が実現された。
また、トランザクションログの導入以前、PostgreSQLはトランザクションをコミットするたびにデータファイルを同期書き込みしていたため、書き込み性能が非常に低かった。トランザクションログ実装の議論は1998年からスタートし、2001年リリースのバージョン7.1で実装が完了している。これについては、伝説のプログラマーVadim氏が、Jim Gray著『Transaction Processing』を読み、たった1人で実装したという逸話がある。
日本PostgreSQLユーザ会の創設
PostgreSQLの誕生から2年目の1999年、世界で最初の大規模ユーザーグループとして、石井氏を理事長に日本PostgreSQLユーザ会が創設された。日本のPostgreSQLの利用率が世界の中で群を抜いて高いのは、早期からユーザ会が活発に活動していたためだと言われている。
石井氏はまた、同年1999年にPostgreSQLのコミッターにも就任している。当時から今現在まで、PostgreSQLの開発体制は「特定の企業がソースコードを管理しない集団管理体制をとっている。ほとんどの決定は開発者間の議論で行い、最終決定は数人のコアメンバーが担うが、コアメンバーに特定企業の人物が3人以上入らないようになっている」と石井氏。特定の企業の思惑や、経営状態が影響しないように徹底したコミュニティ開発を継続しているという。