サポート

テクニカル

Q4. どうして性能がいいのですか?

新常識
この30数年の間、半導体集積度の進歩により、CPUのクロックはMHzからGHzへ、主メモリはMBからGBへと1000倍になりました。
しかし、メモリアクセスやディスクアクセス性能はそれほど速くなっていません。
つまり全て1000倍になっていれば、30年前のソフトウェア技術でもそのまま1000倍高速になりますが、そうではないのです。
従来技術では小さな主メモリの使用効率を上げるため、主メモリをブロック管理してディスクとの転送回数を如何に減らすか、というところがもっとも重要でした。
ところが現在のCPUの内臓メモリ(キャッシュ)は1MBもあります。すなわち30年前の主メモリのサイズになります。
いうまでもなく、キャッシュはCPUチップの中にありますからnsecでアクセスできます。
ということは、キャッシュの使用効率を上げるために、主メモリとのアクセス回数を如何に減らすか、というところにポイントが変わってきているのです。
主メモリとのアクセス回数を減らすためには、方法は2つあります。
まずデータのサイズを小さくする(圧縮)、次にデータを捜しやすいように関連付けて保存しておく(データ構造)ということです。
半導体の進歩は今後も続くものとすると、従来技術とのギャップは益々広がっていきます。そのため、この技術が今後の主流となることは間違いないでしょう。

シーケンシャルアクセス
30年の間で、ハードウェア性能が向上したのは、シーケンシャルアクセスであって、ランダムアクセスではありません。
ところが従来のソフトウェア技術は、柔軟性、拡張性の上からランダムアクセスが主流でした。
ディスク転送能力もディスクの密度や回転数が上がっていますので、ストライビング(ディスクを平行転送)すればシーケンシャルな転送能力は数100MB/secも出ます。
数GBもある主メモリを4KBや8KBの小さなブロックで管理してディスク転送していては、せいぜい20MB/secくらいしかでません。
シーケンシャル転送にすればそれだけで10倍速くなることになります。

データ圧縮
従来のデータベースでは、データを登録(LOADINGやINSERT)すると、元データより大きくなります。
インデックスにもよりますが、通常は3倍以上になります。高速機関では、元データの1/2から数分の1と小さくなります。
データベースの性能は、該当するデータを探す時間、つまりデータのサイズに大きく依存します。
従って、データベースのサイズの差だけでも、検索時間の性能差が10倍以上となります。

データ構造
高速機関では、データをLOADINGやINSERTしたときに関連するテーブルの各要素間の参照関係を全てポインタでリンク付けています。
従って、検索や集計する場合にはそのポインタがさすデータを持ってくるだけですから、瞬時にデータを持ってこれるのは当たり前ということになります。
従来のRDBでは、LOADINGやINSERT時には単にデータを格納するだけで、なんのデータ構造も保有していません。利用する段階になって初めて探すのですから、時間がかかるのは当然です。