PGCon2010参加レポート (開発者会議編)
NTTオープンソースソフトウェアセンタ 板垣 貴裕
カンファレンスには PostgreSQL のユーザの他、多くの開発者も参加します。 そこで、カンファレンスの前日に、開発者会議 (Developer Meeting) を開催し、PostgreSQL の主要な開発者や大きなシステムで利用しているユーザが集まりました。 丸一日ホテルの会議室を借り切って、これまでの開発の振り返りと、今後の発展について、密度の高い議論が行われました。 筆者も開発者の1人として会議に参加しましたので、その模様をお伝えします。 また、会議の詳しい議事メモは PostgreSQL Wiki (英語) にまとまっています。
PostgreSQL 9.0 の開発を振り返って
9.0もβテストに入り、開発としては一段落ついていました。 PostgreSQL 9.0 の開発では、これまでに無い試みが行われました。 「コミットフェスタ」と呼ばれる新機能パッチをマージする期間を管理する専用のアプリケーションを作成し、フェスタの成果を早期にユーザにお知らせするための「α版リリース」も初めてでした。
そういった試みは、概ね上手く働いたようです。 α版もテストしてもらえたユーザ数は多くはありませんでしたが、今後も継続していきたいということです。 また、さらに開発の効率を高めるために、ソースコード管理を CVS から Git に移行することが決まりました。
9.0 開発の反省点としては、せっかくパッチを投稿しても、長い間レスポンスやコメントが得られず、コミットフェスタぎりぎりになって注文がつくことが多いという不満が挙がりました。 これを改善するためには、開発者への早期のフィードバックが必要だということで、実際にコードを採用するコミッタ(メンテナ)がパッチをチェックするよりも前に、有志によるパッチのビュー期間として「レビューフェスタ」を設けてはどうかという提案がありました。
そのほか、品質向上のためのテスト期間はどうしてもその次のバージョンの議論が滞ってしまうため、開発者を遊ばせてしまっているという問題が提起され、品質向上期間中に、次のバージョンをブランチして開発を始ることになりました。
このように、PostgreSQL の開発は、問題の発展的な解消方法を開発者がみんなで考えるという、民主的 (というより牧歌的?) な運用がされています。 とはいえ、開発者数も多くなっており、ソフトウェアの規模も大きくなって来たことから、全体を見通せる少数の開発者に頼ることに、若干の危機感もあるようです。 今後は、堅牢な開発を行うための組織作りも取り組まれていくでしょう。
PostgreSQL 9.1 のロードマップ
その後、次期版 9.1 に向けて開発する項目についても話し合われました。 今後の開発ロードマップとして、PostgreSQL がどのような方向へ向かっていくかが垣間見えてきます。
まず最初に、ユーザから望まれている機能や、開発者それぞれが取り組みたい機能を列挙しました。 そして、各機能ごとに、どういった方向性を目指すかについて開発者の合意を得るための議論がおこなれました。 ここでは、9.1 で取り組まれる開発項目を、機能別に紹介していきます。
- MERGE/UPSERT/REPLACE
- IDが一致する行がすでに存在していればUPDATE、無ければINSERTになるコマンドです。 同じ機能を行うコマンドはデータベースごとに方言があるのですが、標準SQLでは MERGE が正式なことから、MERGE を実現する方向を目指すと思われます。 Google Summer of Codes のプロジェクトとして進められています。
- 同期レプリケーション
- 9.0 で非同期レプリケーションが採用されましたが、高い信頼性を要求される用途では、たとえフェイルオーバーが発生しても更新結果が失われるのは困ります。 そこで、スタンバイサーバにも同期で更新結果を転送し、サーバ1台だけの故障まで耐えられる同期モードの追加が計画されています。 9.1 の開発項目としては、期待度としては一番高いようです。
- パラレルpg_dump
- マルチプロセス処理でダンプを高速化する試みです。 pg_restore についてはすでに 8.4でパラレル化されていますが、ダンプ側もパラレル化により論理バックアップにかかる時間を短縮させる試みです。 また、ここで培われる要素技術は、さらに将来のパラレルクエリに繋がると注目されています。
- SE-PostgreSQL / 行レベルアクセス制御
- SE-PostgreSQL は PostgreSQL の拡張として長年に渡り開発されてきており、なんとか PostgreSQL 本体とマージできないか、開発が進められています。 不正アクセス、特に意図しない情報持ち出しにも大きな効果があることから、重要な情報を安心して管理するための基礎になることが期待されています。
- SQL/MED 外部テーブル
- 外部のファイルやデータベースと連携するための機能です。 CSV ファイルなどの一般データを仮想テーブルとして取り込む機能の他、外部のデータベースサーバ (PostgreSQL だけでなく、他のDBMSも) に接続して、直接データベース間でデータを交換するような用途が想定されています。 また、パーティショニングと組み合わせてノード間データ分散などにも発展する可能性もあり、将来性のある計画です。
- 準備済み文の実行計画改善
- 準備済み文 (Prepared Statement) にて、実際に与えられたパラメータを踏まえて実行計画を最適化する計画です。 例えば "LIKE $1" という場合でも前方一致検索ならばインデックスが使えるようになるかもしれません。 一見は派手では無いものの、恩恵を受けるアプリケーションは非常に多いため期待されます。
そのほかにも、既存の機能の使い勝手の向上 (パーティショニング, グローバル一時テーブル etc.) や、PostgreSQL の高い拡張性を活かしたデータ側の追加 (JSON 型, 範囲型) 等が計画されていました。
おわりに
PostgreSQL は特定の企業の持ち物ではなく、多くの利用者と開発者の話し合いによって、発展の方向性が決まっていきます。 多くの開発者が集まる理由には、ソースコードがオープンなだけでなく、開発スタイルもオープンなことも良い方向に働いていると思われます。 まだまだ発展が留まらない PostgreSQL に、今後も期待しましょう!
(2010年6月15日公開)
- 1
- 2



