rknfish

rknfish

i need more love
github

講義#05:ストレージモデルと圧縮

スライドを参照

ノートを参照

Mermaid Loading...

データベースのワークロード#

OLTP#

OLTP: オンライントランザクション処理

小規模なデータの読み取りと更新を高速に行う操作。

OLTP

OLAP#

OLAP: オンライン分析処理

複雑な分析操作をサポートし、意思決定を提供するためのもの。

image

HTAP#

ハイブリッドトランザクション + 分析処理

OLTP と OLAP を組み合わせた新しいワークロード。

OLTP OLAP HTAP


ストレージモデル#

N-Ary ストレージモデル(NSM)#

n-aryストレージモードでは、DBMS はすべての属性を含むすべてのタプルを連続して 1 つのページに格納します。

n-ary-model

これは OLTP にとって非常に理想的です。

利点:

  • 挿入、更新、削除が非常に高速です。
  • タプル全体が必要なクエリに非常に適しています。

欠点:

  • テーブル全体をスキャンするクエリや 1 つの属性のみが必要なクエリには非常に適していません。

image

分解ストレージモデル(DSM)#

すべてのタプルの各属性を個別に格納します。

列ストア(column store)とも呼ばれます。

読み取り専用の OLAP 操作に非常に適しており、特に一部の属性のみをスキャンする操作に適しています。

image

利点:

  • I/O の浪費を減らします。
  • クエリの実行とデータの圧縮が向上します。

欠点:

  • 単一のポイントの変更、クエリの更新などの操作には遅いです。

この操作を実現するためには、通常、2 つの方法があります。

  1. 各属性に固定のビット幅を設定し、必要なデータを正確に検索するためにオフセットを取得するだけです。
  2. よりまれな方法として、値を格納するために (id : pos) のような形式のタプルを使用する方法もあります。

image

データベースの圧縮#

I/O は非常に時間がかかるため、DBMS では一般的に圧縮アルゴリズムを使用してパフォーマンスを向上させるために使用されます。

通常、速度と圧縮率の間でトレードオフをする必要があります。

圧縮の粒度#

  • ブロックレベル
  • タプルレベル(NSM のみ)
  • 属性レベル
  • 列レベル

ナイーブな圧縮#

一般的な圧縮アルゴリズムを使用する方法もあります。ただし、この方法を使用すると、DBMS は操作しているデータが何であるかを解凍するまで知りません。

提供される入力:
→ LZO(1996 年)、LZ4(2011 年)、Snappy(2011 年)、Oracle OZIP(2014 年)、Zstd(2015 年)

image

速度を向上させるために、圧縮後でも情報を取得して高速化する方法が必要です。

image

列圧縮#

Run-Length Encoding(RLE)#

同じ列に連続して出現する値を(value : pos : num)のような形式のトリプレットで圧縮することができます。

ここで:

  1. valueは値を表します。
  2. posはその値の開始位置を表します。
  3. numはその値の繰り返し回数を表します。

image

ただし、この方法にはいくつかの欠点がある可能性があります。

image

変換後

image

Bit-Packing Encoding#

一部のデータは非常に冗長であるため、ビットパッキングを使用してこの冗長性を減らすことができます。

image

int64int8に変換することで、必要なスペースを大幅に削減できます。

ただし、この方法にはいくつかの欠点があり、一部の情報がint8に合わない可能性があります。

したがって、次のように保存する必要があります。

image

ただし、この方法は追加のストレージが少ない場合にのみ使用できます。

ビットマップエンコーディング#

各属性に少数のデータがある場合、ビットマップを使用して保存できます。

たとえば、FMの 2 つの値しか存在しない場合、01で表すことができます。

image

Delta Encoding#

多くの場合、室温などの統計結果には特定の範囲内で密集した値が存在する場合があります。

そのため、特定の値を決定した後、その後のすべての値はdeltaの形式で保存できます。

image

Incremental Encoding#

通常、接頭辞 / 接尾辞を取ることで最終結果を得ることもできます。

image

辞書圧縮#

1 つのテーブルに複数の値が存在し、これらの値が異なる場所に存在する場合、辞書の形式で値の位置を取得できます。

これは最も一般的な圧縮方法です。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。