TOP>企業情報>コラム>技術情報>イギリス版PostgreSQLカンファレンス「PGDay UK 2014」参加レポート(前編)

イギリス版PostgreSQLカンファレンス
「PGDay UK 2014」参加レポート(前編)

2014年4月にイギリスに住まいを移した筆者が、海外のデータベース事情第1弾として、去る2014年7月9日に開催された「PGDay UK 2014 」の様子をレポートします。

▼ 前編    後編

「PGDay UK」はPostgreSQL Users Groups UK主催のイベントの1つで、日本でのJapan PostgreSQL Users Group(JPUG)主催のPostgreSQLカンファレンスと同様のイベントにあたります。開発者による新機能紹介やユーザの導入事例など、PostgreSQLの最新情報を得る絶好の機会と言える様々なセッションの内容を前編、後編の2回に分けてご紹介します。

高瀬 洋子(Youko Takase)

株式会社アシスト データベース技術本部

アシスト入社後、Oracle Databaseのサポート業務を経て、2009年よりPostgreSQL、EDB Postgresのサービス立ち上げに参画。「PostgreSQLなら高瀬に聞こう」と社内外から言ってもらえる存在となることを目標に日々活動。2014年4月よりイギリスに拠点を移し、PostgreSQL、EDB Postgresの啓蒙活動と顧客対応の後方支援を担当。

高瀬の紹介記事はこちら


受付で名前を告げるとネーム入りホルダが手渡され、それを首から下げていざ会場へ。参加者は総勢60名ほどで、日本のPostgreSQLカンファレンスと比較するとこじんまりとした印象を受けます。10時からスポンサー企業の1つであるエンタープライズDB社、Dave Page氏の挨拶からスタートしました。

「PGDay UK 2014」開催にあたりスタッフへの謝辞を述べた後、いよいよセッション開始です。

MySQLからPostgreSQLへの移行事例紹介(Rant & Rave社)

セッション1 「Migrating Rant&Rave to PostgreSQL」

スピーカー: Rant & Rave 社 Mike Fowler 氏

Mike Fowler 氏

スピーカー Fowler氏が所属するRant & Rave社 はユーザ企業と彼らの顧客をリアルタイムにつなぐ仕組みを提供する企業で、SMSやWeb、モバイルなどを使って顧客の行動やコメントを収集しています。

バックエンドデータベースにはMySQLを採用しており、ユーザ企業別に分けられた約8,200個のテーブルとユーザが望むデータを即座に参照するための約3,000個のビューが格納されていました。PostgreSQLへの移行のきっかけは、データベースの夜間メンテナンス処理が原因不明によって失敗するなどMySQLで時折動作が不安定になることでした。また、MySQLレプリケーション環境で複数サイトのタイムスタンプが異なるなどいくつかの課題があったことも移行を決断する後押しとなりました。

移行作業における要件は以下の3つです。

  • ダウンタイムを最小限に抑える
  • 移行前と後でスキーマとデータが完全に一致している
  • ユーザ処理の互換性を保つ

まず、ダンプ&リストア時間を短縮するために使っていないテーブルなどのオブジェクトを整理し、更新が発生しない履歴データなどのテーブルを事前に移行しました。今回の移行ではダウンタイムを最小限に抑えるためにダンプ&リストア作業をオンラインで実施できるようにmysqldumpフォーマットからpsqlフォーマットへ自動変換するPerlスクリプトが準備されました。このスクリプトはconvert.plという名前で一般公開される予定です。オープンソースソフトウェアを利用する企業ならではの活動と言えます。

MySQLとPostgreSQLではテーブルやビューの作成構文は驚くほど似ており、数値型、文字型、日付型などの主要なデータ型は対応するデータ型へマッピングするだけですが、特殊なデータ型と言えるTINYINT型はPostgreSQLのBoolean型へ、BLOB型はhexdecimalで出力されるようにmysqldumpに--hex-blobオプションをつけるなど注意が必要です。キャラクタエンコーディングの違いも課題に挙がりますが、mysqldumpにdefault-charcater-set=utf8オプションをつけることで回避できます。

また、クエリは同じ結果が返ってくるように書き換えなくてはならないため、まずファンクションが含まれるクエリを洗い出し、必要に応じてPL/pgSQLでファクションを作成します。その他にもいくつか考慮点が紹介されました。MySQLは大文字小文字を区別しないため、例えばLIKE演算子を使ったあいまい検索はPostgreSQLではILIKE演算子に置き換えるか、LIKE演算子とlower関数またはupper関数を組み合わせて利用します。完全一致検索の場合は、lower関数やupper関数を含むファンクション索引を作成することで性能を確保できます。またPostgreSQL 8.3以降ではWHERE句に指定された列のデータ型を明示的にキャストさせる、GROUP BY句に指定していない列をSELECT句で利用していないかどうか確認するなど両データベースの相違点を元に細かく確認する必要があります。MySQLからPostgreSQLへの移行で改修クエリの洗い出し、動作確認、書き換えにかかる時間を軽減するため、MySQLのクエリをPostgreSQL対応に自動で書き換えるMyPGJDBCと呼ばれるJDBCドライバもあわせて提供されるようです。

PostgreSQL 9.4の新機能紹介

セッション2 「PostgreSQL Features in 9.4 」

スピーカー: Magnus Hagander 氏

2つ目のセッションはPostgreSQL開発コミュニティのコアメンバーの1人であるMagnus Hagander氏によるPostgreSQL 9.4新機能の紹介です。

PostgreSQL 9.4は2013年6月に9.3から枝分かれし、その後4回のコミットフェスタを通過して、2014年5月にBeta1がリリースされています。本セッションでは以下の観点で新機能が紹介されました。

  • Developer and SQL features
  • Infrastructure
  • DBA and Administration
  • Replication and Recovery
Magnus Hagander 氏

開発面では、集約処理でFILTER句やORDER BY句を含めることができ、CASEによる分岐が不要になる点です。OLTP用途だけでなく、BIやDWH用途でPostgreSQLの利用拡大が期待できます。また、PostgreSQL 9.3で新たに実装された更新可能ビューも機能強化され、更新可能な列と更新不可の列が混在したSQLで内部的に更新可能な列を識別して更新処理を実行できるようになります。ビュー作成時にWITH CHECK OPTIONをつけると、ビューに対する更新処理の際にビュー作成時のWHERE条件をチェックし、条件に合わない処理はエラーにより実行されないように制御できます。PL/pgSQLでスタックトレースが取得できるようになったこともデバッグの際に役立つことでしょう。また、HStoreとJSONが統合されたバイナリJSON型のJSONBが実装されます。GINインデックスと組み合わせることでPostgreSQL 9.3のJSONやMongoDBなどNoSQLよりも高い性能が確保できるようです。Hagander氏がセッション時間の半分を費やして開発面の新機能を熱く語っていたことからも新機能への自信が伺えました。

インフラストラクチャの主な機能として、PostgreSQL 9.3で新たに実装されたバックグラウンドワーカプロセスが動的に起動できる点や共有バッファが要求に応じて動的に確保できる点が紹介されました。これらは今後のパラレルクエリの実装に活用予定のため今後も要注目です。また双方向レプリケーションやロジカルレプリケーションの実装を見据えて、WALファイルから行などの論理変更情報を出力できるフレームワークが追加された点やストリーミングレプリケーションでスロットと呼ばれる単位WALの更新情報を管理することで、スタンバイ側へ転送される前にWALファイルが削除されるのを防ぐことができるようになる点が紹介されました。DB管理機能としては、テーブルやインデックスデータをあらかじめ共有バッファやOSバッファにキャッシュできるpg_prewarmユーティリティや動的にデータベースパラメータを変更するコマンドとして商用RDBMSと同じALTER SYSTEMコマンドの提供、WALのアーカーブ状況を確認するためのpg‗stat_achiverビューなどデータベースを管理・運用するうえで商用RDBMSと同じようにきめ細かい設定ができるようになっており、今秋の9.4正式版のリリースが待ち遠しい限りです。


外部データにアクセスする仕組み「Foreign Data Wrapper」

セッション3 「Foreign Data Wrappers」

スピーカー: Translattice 社 Markus Wanner 氏

Markus Wanner 氏

3つ目のセッションは、スポンサー企業の1つであるTranslattice社のMarkus Wanner氏によるForeign Data Wrapper(以下、FDW)のお話です。

FDWはPostgreSQLと外部データベースやファイルなどをつなぐ機能で、PostgreSQLへの段階移行やETLツールとしての利用などPostgreSQLと外部データとの連携に重要な役割を担っています。PostgreSQL本体のcontribに含まれるFDWにはPostgreSQLデータベース間をつなぐpostgres_fdwと非構造型の外部ファイルとの連携を担うfile_fdwがあり、それ以外にもOracle Databaseとの連携を担うoracle_fdwやhadoopやmongoDBとの連携を担うhadoop_fdw、mongo_fdwなど多くのFDWが存在します。各FDWはそれぞれ個別のプロジェクトで開発が進められており、リリースサイクルや互換性、品質もさまざまです。本セッションではmysql_fdwを例に設定手順が紹介されました。

mysql_fdwは参照処理のみのサポートですが、PostgreSQL 9.3以降ではpostgres_fdwとoracle_fdwなど一部のFDWで更新処理もサポートされています。ただし、現時点では2相コミットが実装されていないことやFDW経由で接続先のテーブルにロックがかけられないなどの制限があります。実環境への採用にはこれらの制限を回避する今後の機能拡張に期待したいと思います。



以上が「PGDay UK 2014」の前半3セッションのご紹介となります。
後半3セッションについては、「PGDay UK 2014」参加レポート(後編)をご覧ください。


関連製品/サービス


Facebookで情報をお届けしています

Facebookでは、アシストの「今」を週3回のペースでお届けしています。「めげない、逃げない、あまり儲けない」を合言葉に日々頑張っておりますので、応援よろしくお願いします。



ページの先頭へ戻る