また、Background Workerでは、ダイナミックにシェアードメモリを利用できるようになり、処理の並列化を実現しているという。例えば、クエリ処理やソート処理などは、逐次ではなく並列で実行できるようになる。これにより処理を非常に高速に行えるようになる。
PostgreSQLでは、現行のバージョンでもJSON形式に対応しているが、9.4ではバイナリデータも扱えるようになる。「これはロシアのデベロッパーが貢献した実装だ」(Momjian氏)という。
現在、JSON形式でのデータ格納はString型を利用している。このため、例えば非常に長いデータをString型で格納した場合、データのパース処理などの際に非常に遅くなるデメリットがあった。PostgreSQL 9.4では、JSONでデータを格納する際に、バイナリ型が利用できるようになる。これにより、前述したようなString型として扱うような処理の遅さを回避できる。加えて、インデックスにおいてもKVS的なデータ格納を許容する。
これにより、「PostgreSQLでは、ドキュメント指向DBとして北米で人気のあるMongoDBや、その他のKVSを利用した場合よりも、処理が高速に実行できるようになる」(Momjian氏)という。
PostgreSQLの環境設定に使われているpostgresql.confの操作をSQLから行える実装も加わる。地味ながら、ユーザーにとっては非常に利便性が高い実装といえるだろう。
「この機能は多くの利用者が求めていたもの。影響範囲も大きいことから、実装方法の議論は18カ月を要した。この実装そのものは、インドのデベロッパーが貢献したものだ」(Momjian氏)
実際のSQLでの操作は、次の図のように実施できる。
GiNインデックスは、汎用転置インデックス(Generalized Inverted Index)のことを指す。バージョン8.2から実装されているもので、全文検索などに利用できる(contribの幾つかのツールで実装されている)。GiNインデックスはGiSTインデックスよりも高速な検索が可能な点が特徴だ。一方で更新などの処理はGiSTよりも遅い。
PostgreSQL 9.4ではこのGiNインデックスがより小さく、高速になっている。インデックスのサイズは80%ほど小さくなったという。この改良は、例えばGISデータや全文検索、先のJSONBデータなどの処理高速化に大きく貢献するものになる。
ビットマップインデックスを使うオブジェクトデータベースは一般に非常に高速であるが、「ビットマップインデックス以上に高速で、かつ上限を設定する必要がない点で優れている」(Momjian氏)という。
WALそのものの機能改善も行われている。現行バージョンでも16CPUまでのスケールアップが可能だが、よりスケールできる実装が加わるという。また、書き込みのパフォーマンス改善も行われている。
現在のPostgreSQLが実装するStreaming Replicationは書き込みを同期的に行う。このため、レプリケーションとしての信頼性はあるものの、ロールバックしたい場合には意味を成さない場合もあった。例えば、ハードウェアエラーや人為ミスによるシステムエラーなどが発生した場合を想定して、遅延時間を設定できるように改良しているという。
Copyright © ITmedia, Inc. All Rights Reserved.