Sybase IQが速い仕組み
サイベースの情報系専用RDBMS・Sybase IQのデモを見てきた。
ノートPCにインストールしたSybase IQが、1億件x数万件x数万件x数万件の結合と集計を5秒でこなしていた。
同社の汎用DB(Sybase ASE)は同等の処理に80秒かかっていた。
一般的なRDBがレコードをページに格納するのに対して、Sybase IQはカラムをページに格納する。
データをヨコ切りしないで、タテ切りしてディスクに書くわけだ。するとクエリに関係のない不要なカラムまで読み出して捨てる手間が省ける。これが速い理由の一つ。
ホワイトペーパーを引用すると
以下のような条件を想定してみます。
- テーブルは1ローあたり800バイト、1000万ローからなる
- 性別・州・保険の加入状況のカラムがある
- 「カリフォルニア州で保険に加入していない男性」を検索する
汎用なRDBMSの場合、ロー単位のアクセスですから、800バイトのローを1000万件全て、つまり
80億バイト読み込む必要があります。仮にページサイズが16KBならば、ディスクI/O回数は
800×1000万/16KB = 50万回となります。
一方Sybase IQでは、性別・加入状況をそれぞれ1バイト、州を2バイトと仮定すると、カラム
単位アクセスですから読み込み量は4000万バイト、同じく16KBのページサイズとすると、
I/O回数はわずか2500回となります。
レコードではなくカラムを格納し、テーブルは単なるビューにしてしまう、という設計なので、Sybase IQの中身は普通のRDBのようなテーブル+インデックスの二階建てにはなっていない。物理的にはインデックスしか存在ない。さらに同一ページには同じ型のデータが詰まっていることが保障されるので、データの圧縮効率が高い。以上のことから、Sybase IQは一般的なRDBに比べてディスクを食わない。
何だかいいことずくめだ。サイベース自身が「IQはDWH専用。OLTPには向かない」と言っているのだから、何かトレードオフがあるはずなのだが、よくわからない。
レコードをそのまま物理的に格納していることが現代のRDBMS実装の問題点だ、とDateがどこかに書いていた。汎用RDBがレコードをそのままの形で物理格納しなくてはならない理由は何なのだろう。
低レベルなRDB実装のことがぜんぜんわかっていないので仮説すら浮かばない。この話はここまで。