PostgreSQLへの高速データロードツール [pg_bulkload]
今月の気になるオープンソース情報(2016年8月号)
OSS研究室 森 将史
今回は、PostgreSQLへのデータロードツール、pg_bulkloadについて紹介します。
PostgreSQLはリレーショナルデータベース管理システムの一つで、世界中で広く使われています。pg_bulkloadは、PostgreSQLへのデータロードを高速化することが出来ます。
データロードは、システムの移行や導入にあたって既存のデータを引き継いだり、複数のデータベースを統合するときに必要になります。扱うデータの量が増えれば増えるほど、ロードにかかる時間は幾何級数的に増えてしまいます。そのため、少しでも高速な方法が求められています。
pg_bulkloadは、空のデータベースへの投入はもちろん、既にデータを持つデータベースへの投入もどちらも得意としています。単なるデータの移動だけでなく、移行元にあるエラーデータを除外させたり、データを加工しながら投入させることもでき、データロードを必要とするおよそあらゆる場面で活用できます。
ロードの高速化は、PostgreSQLの機能を拡張して利用することで実現しています。たとえば内部関数を直接利用する、トランザクションログをスキップする、インデックスの登録を最後にまとめて行うなどといった技術を駆使しています。
しかし、そういった特徴のため、いくつか他のデータロード方法と比べて制約もあります。PITR(Point In Time Recovery)やレプリケーション環境では期待通りに動作しません。また、データロード時の操作をトランザクションログから再現することが出来ません。
デージーネットでは、ベンチマークとして、1億件のレコードをもつデータベースを準備し、試験しました。PostgreSQL標準のCOPYコマンドによるデータロードと比較し、pg_bulkloadはおよそ4倍以上高速に動作することがわかりました。
COPYコマンドでは、データ量によっては数時間、下手をすれば数日単位でロード時間がかかってしまう場面もあります。pg_bulkloadを用いることで、そういった規模のデータでも、ずっと短時間でロードを完了させる事ができます。大容量のデータ転送が必要になったときには、ぜひ使ってみてください!
デージーネットではより詳細なベンチマークの結果をホワイトペーパーとして公開しています。導入方法などについても記載されていますのでぜひご一読下さい。以下のリンクからダウンロードしていただけます。