PostgreSQL 9.4の主要な改良点、9.5以降の展望Database Expert イベントレポート(2/3 ページ)

» 2014年07月28日 20時00分 公開
[原田美穂@IT]

バックグラウンドワーカーの並列化

 また、Background Workerでは、ダイナミックにシェアードメモリを利用できるようになり、処理の並列化を実現しているという。例えば、クエリ処理やソート処理などは、逐次ではなく並列で実行できるようになる。これにより処理を非常に高速に行えるようになる。

バイナリJSON(JSONB)への対応

 PostgreSQLでは、現行のバージョンでもJSON形式に対応しているが、9.4ではバイナリデータも扱えるようになる。「これはロシアのデベロッパーが貢献した実装だ」(Momjian氏)という。

 現在、JSON形式でのデータ格納はString型を利用している。このため、例えば非常に長いデータをString型で格納した場合、データのパース処理などの際に非常に遅くなるデメリットがあった。PostgreSQL 9.4では、JSONでデータを格納する際に、バイナリ型が利用できるようになる。これにより、前述したようなString型として扱うような処理の遅さを回避できる。加えて、インデックスにおいてもKVS的なデータ格納を許容する。

 これにより、「PostgreSQLでは、ドキュメント指向DBとして北米で人気のあるMongoDBや、その他のKVSを利用した場合よりも、処理が高速に実行できるようになる」(Momjian氏)という。

postgresql.confへのSQLでのコントロール実現

 PostgreSQLの環境設定に使われているpostgresql.confの操作をSQLから行える実装も加わる。地味ながら、ユーザーにとっては非常に利便性が高い実装といえるだろう。

 「この機能は多くの利用者が求めていたもの。影響範囲も大きいことから、実装方法の議論は18カ月を要した。この実装そのものは、インドのデベロッパーが貢献したものだ」(Momjian氏)

 実際のSQLでの操作は、次の図のように実施できる。

GiN Indexの改良

 GiNインデックスは、汎用転置インデックス(Generalized Inverted Index)のことを指す。バージョン8.2から実装されているもので、全文検索などに利用できる(contribの幾つかのツールで実装されている)。GiNインデックスはGiSTインデックスよりも高速な検索が可能な点が特徴だ。一方で更新などの処理はGiSTよりも遅い。

 PostgreSQL 9.4ではこのGiNインデックスがより小さく、高速になっている。インデックスのサイズは80%ほど小さくなったという。この改良は、例えばGISデータや全文検索、先のJSONBデータなどの処理高速化に大きく貢献するものになる。

 ビットマップインデックスを使うオブジェクトデータベースは一般に非常に高速であるが、「ビットマップインデックス以上に高速で、かつ上限を設定する必要がない点で優れている」(Momjian氏)という。

WALそのもののパフォーマンス改善

 WALそのものの機能改善も行われている。現行バージョンでも16CPUまでのスケールアップが可能だが、よりスケールできる実装が加わるという。また、書き込みのパフォーマンス改善も行われている。

Streaming Replicationにおけるディレイ機能の実装

 現在のPostgreSQLが実装するStreaming Replicationは書き込みを同期的に行う。このため、レプリケーションとしての信頼性はあるものの、ロールバックしたい場合には意味を成さない場合もあった。例えば、ハードウェアエラーや人為ミスによるシステムエラーなどが発生した場合を想定して、遅延時間を設定できるように改良しているという。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。