2016-09-08 6 views

答えて

0

「ディスクのシークははるかに高速です」は間違っています。本当の問題は「列指向のデータベースがデータをディスクに格納する方法」であり、通常は「シーケンシャル書き込みのみ」です(通常はデータを更新しません)。高速ゲイン。

0

大きな違いは、データがディスクに保存される方法です。

のは、簡単な例(オーバー)を見てみましょう:

いくつかの数字(格納されたバイナリ)などあり、我々は50列を持つテーブルがあるとし、幅のテキストを固定している - 1024バイトの合計レコードサイズで。行数は約1,000万で、合計サイズは約10GBです.4GBのRAMを搭載したPCで作業しています。 (これらのテーブルは通常、ディスク上の別々のブロックに格納されますが、データは簡単にするために1つの大きなブロックに格納されているものとします)。

ここで、特定の列(レコードの4バイトとして格納された整数)のすべての値を合計するとします。これを行うには、1024バイト(レコードサイズ)ごとに整数を読み取る必要があります。

ディスクから読み取ることができるデータの最小量はセクタであり、通常4KBです。だから、読んだセクターごとに4つの値しかありません。これは、列全体を合計するために、10GBファイル全体を読み取る必要があることも意味します。

一方、列ストアでは、データは別々の列に格納されます。これは、整数列の場合、4の代わりに4096バイトのセクタに1024の値を持つことを意味します。 (時にはそれらの値をさらに圧縮することもできます) - 現在読まなければならないデータの総量は10GBではなく約40MBで、将来の使用のためにディスクキャッシュにも残ります。

CPUキャッシュ(データがディスクからすでにキャッシュされていることが前提)を使用するとさらに優れています.1 1024バイトごとに1つの整数はCPU(L1)キャッシュに最適ではありませんが、 (通常のメモリアクセスより約50倍高速なL1キャッシュに格納されます)。

関連する問題