DBMSとしての機能面の違い〜エンタープライズDBMS向けの機能の有無について
今回は機能面に着目してみます。機能といっても、各RDBMSでその機能と名称(呼称)が一致する訳ではない為、一概に「どちらか一方にだけはこの 機能がある」という比較は難しいものです。ここでは、よく耳にする「PostgreSQLにはエンタープライズ向けのDBを構築する為の機能が不足してい る」という指摘について、それはどういった部分を指しているかを考えてみたいと思います。
Oracleにあって、PostgreSQLにはないエンタープライズ向けの機能の有無を考えた場合、次に示す三つの大きなポイントがあります。

これら3つのポイントについて、個別に問題を洗ってみます。
先に断っておきますが、機能は有効に使ってこそ、その意味がある訳で、機能が実装されているか否かで優劣を判断するのではなく、そのシステムに必要 な機能・パフォーマンスを実現できるか否かを判断の基準とすべきです。全てのシステムがこれらの機能の実装を必要とする訳ではないのですから。
大規模システム系の機能
1つのDBMSの中に格納された大量のデータを高速に処理する為の機能、と言い換えて考えて頂いたほうがイメージは捉えやすいでしょう。Oracleで言うと次の3つの機能が代表的なものです。
-
パラレルクエリー、パラレルDML
実行するSQL文に並列度をあたえ、1つの処理を複数プロセスに実行させる機能。
-
パーティショニング
表データをある定義によって複数のパーティションに分割して格納し、特定条件下での処理において操作範囲を絞ることで高い処理速度を実現する機能。パラレル系の操作と同時に使用する事で、さらに高い効果を発揮します。
-
ビットマップインデックス
B-Tree型の索引ではなく、データ項目に対しビットマップ形式で索引を形成する機能。複数条件での演算が高速に行なえる。
他にもDWH(データウェアハウス)向けの機能が統合されたOracleには、大量データを高速に処理する為に向いた機能があります。
PostgreSQLでは、こういった機能が現時点では実装されていません。その上アーキテクチャの説明にもあったように、データの格納方式という点において大量データを保存する事に向いているとは言えないという点もあって、得意とは言えません。
ただし実際の現場では、こういった特性を押さえた上で、下記のような工夫を積み重ねて回避しているシステムも確かに存在しています。
-
データを格納するディレクトリ以下をハード的にRAIDで高速化する。
- データをアプリケーションで機械的に分割して複数のPostgreSQLサーバへ格納し、処理もデータごとに分割、結果をマージする。