PostgreSQL 9.4 Beta版には待望の"バイナリJSON"型,JSONBが実装されている。この文書データのための新しいストレージ形式には,JSONデータをハイパフォーマンスに操作するためのインデックス処理,関数,演算子が用意される。
JSONB型は2つのプロジェクト,HStoreとJSONが統合されたものだ。JSONの持つ特長をすべて備えるだけでなく,バイナリ表現の採用やインデックスによって,ストレージの効率化や検索の高速化も実現している。現在HStoreとJSONを使用しているユーザはすべて,最終的にはJSONBに移行すると期待されている。
PostgreSQLのユーザベースはこれまで,堅牢なリレーショナル機能を求める開発者や,Oracleなどエンタープライズデータベースから転向したユーザだった。それが今,NoSQL機能を重視するのはなぜだろう?疑問に答えてくれたのは,コアチームメンバのひとりであるJosh Berkus氏だった。
Oracleのマーケットは,現在は大規模ですが,まったく成長していません。PostgreSQLに移行するユーザの実数はそれよりも小さいのです。PostgreSQLが今後どれほど多くの機能を追加したとしても,Oracleに追いつくことを目標にしている限り,Oracleを越えることは絶対にできません。
革新的な技術を採り入れることで,新たなユーザの獲得とマーケットの拡大が可能になります。
そのスレッドの他のコメントからも,Node, Python, Go, Rubyといった技術でPostgreSQLを使用するいくつかのスタートアップ企業が,パフォーマンスに優れたJSONサポートを待ち望んでいた様子がうかがえる。
これらの点を考慮して確実に言えるのは,PostgreSQLが新たなユースケースを手に入れるためには,これまでの特長である信頼性などを損なうことなく,JSONのファーストクラスでのサポートを実現することが必要だということだ。
PostgreSQLよりもNoSQLデータベースが適している領域は他にもある。例えば,EnterpriseDBの上級データベースアーキテクトでコアチームメンバのBruce Momijan氏は,次のように指摘する(Eメールより抜粋)。
PostgreSQLの機能や性能が向上しても,NoSQLソリューションの方が適しているエッジケースはやはり存在します。列指向(columnar)データベースであるCassandraは,ログファイルのような重複の多い非構造データに適していますし,新しいノードの追加も容易です。ただし,NoSQLの機能の恩恵を望む一方でACID準拠も必要なアプリケーションには,PostgreSQLがやはり有利でしょう。
有力なコントリビュータであり,EnterpriseDBの上級データベースアーキテクトであるRobert Haas氏も,次のように述べている。
MapReduceを使用して高度な並列クエリを実行している場合を例にしましょう。この場合はHadoopなどを使った方がよいかも知れません。もうひとつの例は,データモデルが,大規模なJSONオブジェクトに細かな修正を何度も行う必要のある場合です。NoSQLソリューションの中に,このようなケースをもっと効率よく扱えるものがあるかも知れません。
このような特定のユースケース以外にも,スキーマレスとリレーショナルストレージをデータタイプによって柔軟に使い分ける必要のあるアプリケーションや,ACIDを保証が必要な場合に対して,PostgreSQLは説得力のある選択肢になろうとしている。
バージョン9.4で導入される重要な新機能は,JSONBの他にもいくつかある。
- Data Change Streaming API – レプリケーションストリームのデコードと変換を可能にする。新しいレプリケーションツールの基本機能として,高速かつ柔軟なレプリケーションとスケールアウトソリューションをサポートしている。
- "並行リフレッシュ"を備えたマテアライズドビュー。
- ALTER SYSTEM SET – 管理作業を容易にするために,リモートクライアントのSQLコマンドラインによってpostgresql.confが変更可能になる。
その他の新機能としては,
- ダイナミック・バックグラウンドワーカ
- レプリケーションスロット
- 書き込み処理のスケーラビリティ向上
- アグリゲート,GINインデックスの縮小化,WALボリュームの削減など,いくつかのパフォーマンス向上。
- 更新可能なセキュリティバリアビュー
- 新たな配列操作とテーブル機能
- 遅延スタンバイ
- MVCCシステムカタログの更新
- いくつかのALTER TABLEコマンドでロックレベルを低下
- バックアップのスロットリング
- WITHIN GROUP句
変更点のリストはリリースノートで確認することができる。