🤖

自作RDBMS: Disk and File Management

2023/12/18に公開

https://qiita.com/ryo_grid/items/f23bb5846558698ec4cc

永続性の担保について

RDBMSは、永続性を担保するため永続的なstorage deviceに書き込みを行う.
以下が一般的なstorage deviceの例

  • Disk Drive(一般的にDBに利用されるdevice)
  • Flash Drive

Disk Driveについて

platter-track-sector

  • Platter
    • 定義: ハードディスクドライブ(HDD)内の円盤状の部品で、磁気材料でコーティングされている
    • 役割: ディスクドライブの主要なデータ記憶媒体
  • Track
    • 定義: プラッターの表面にある同心円状のパス
    • 役割: データを整理して記録するための基本単位(データはトラック上の特定の位置に記録され、ディスクヘッドによって読み取られる)
  • Sector
    • 定義: トラックをさらに細かく分割した部分で、データの最小の物理的単位
    • 役割: データの読み書きが行われる際の基本単位(固定サイズ(例えば512バイトや4KB))

Disk Driveの各処理の時間

  • シーク時間

    • シーク時間は、アクチュエータがディスクヘッドを現在の位置から要求されたトラックに移動するのにかかる時間
    • 移動する必要があるトラックの数に依存
      • 最小: 0ms (目的のトラックが開始トラックと同じ場合)
      • 最大で15-20ms (目的と開始のトラックがプラッタの異なる端にある場合)
    • 現代のディスクでは: 平均シーク時間は約5ms
  • 回転遅延(Search時間)

    • 回転遅延は、プラッタが回転して最初の要求されたバイトがディスクヘッドの下に来るまでの待機時間
    • 回転遅延は、最低0sec(最初のバイトがちょうどヘッドの下にある場合)から、完全な回転の時間(最初のバイトがちょうどヘッドを通過した場合)までの間で変動
    • 平均的な回転遅延は、回転時間の半分
      • 例えば、10,000rpm(rotations per minute)で回転するディスクドライブの場合、平均回転遅延は約3ms

平均回転遅延は、ディスクが1回転するのにかかる時間の半分になる.

1回転あたりの時間 = 60秒 ÷ N rpm
平均回転遅延 = 1回転あたりの時間 ÷ 2
  • 転送時間
    • 転送時間は、プラッタが回転し続ける間、ディスクヘッドの下に現れる各バイトを読み取る(または書き込む)時間
    • 転送時間は転送レートを使用して簡単に計算可能
      • 例えば、転送レートが秒あたりb1バイトで、b2バイトを転送する場合、転送時間はb2/b1秒
    • 例として、83MB/秒の転送レートを持つディスクドライブでは、
      • 1バイトの転送時間: 約0.000012ms
      • 1,000バイトの転送時間: 約0.012ms
1回転あたりのデータ量 = 1トラックあたりのセクター数 × 1セクターあたりのバイト数
最大転送レート = 1回転あたりのデータ量 × 1分間の回転数

の3段階でディスクアクセスを実行する.
RAMと比較すると、RAMよりも遅く、特にシーク時間と回転遅延がオーバーヘッドとなる.

RAID

RAID(Redundant Array of Independent Disks)は、複数のディスクドライブを使用してデータの信頼性とパフォーマンスを向上させる技術

  • RAID-0 (ストライピング)
    • 複数のディスクにデータを分散して保存
    • 追加の信頼性はありませんが、パフォーマンスが向上する
    • ディスクのいずれかが故障すると、データは失われる
  • RAID-1 (ミラーリング)
    • 各ディスクのデータを別のディスクに複製
    • ディスクが故障しても、ミラーされたディスクからデータを復元できる
  • RAID-4 (ストライピングとパリティ)
    • ストライピングを使用し、追加のディスクに冗長なパリティ情報を保存
    • ディスクが故障した場合、他のディスクとパリティディスクからデータを再構築できる

RAIDの利点

  • データの信頼性
    • RAIDは、ディスクの故障に対する耐性を提供
    • 特にRAID-1やRAID-4などのレベルでは、ディスクの故障が発生してもデータを失うことなく復旧できる
  • パフォーマンスの向上
    • RAID-0のようなストライピングを使用するレベルでは、複数のディスクから同時にデータを読み書きすることで、高速なデータアクセスが可能になる

RAIDの欠点

  • コスト
    • RAIDシステムは追加のディスクドライブを必要とするため、コストが増加する
  • 複雑性
    • RAIDシステムの管理と設定は複雑になることがある

Disk Striping

  • データの分散
    • ディスクストライピングでは、データを小さな単位(ストライプと呼ばれる)に分割し、これらのストライプを複数のディスクドライブに分散して保存
  • パフォーマンスの向上
    • 複数のディスクドライブが同時に異なるデータストライプを読み書きできるため、全体的なデータ転送速度が向上
  • ストライプサイズ
    • ストライプのサイズは、システムによって異なるが、一般的には数キロバイトから数メガバイトの範囲

Disk Stripingの利点

  • 高速なデータアクセス
    • 複数のディスクが同時に異なるデータを処理できるため、特に大容量のデータを扱う際に高速な読み書きが可能
  • スループットの向上
    • 複数のディスクから同時にデータを読み書きすることで、全体のスループットが向上

Disk Stripingの欠点

  • 冗長性の欠如
    • ストライピング単独では、データの冗長性や耐障害性は提供されない
    • そのため、RAIDの他のレベル(例えばRAID 1やRAID 5)と組み合わせて使用されることが多い
  • 障害リスク
    • 1つのディスクが故障すると、ストライプ化されたデータ全体が影響を受ける可能性がある

RDBMSのRAID活用

RAID(Redundant Array of Independent Disks)は、リレーショナルデータベース管理システム(RDBMS)において、データの信頼性、可用性、およびパフォーマンスを向上させるために広く利用されている

  • データの信頼性と耐障害性の向上
    • データのミラーリング(RAID-1)
      • RAID-1は、データを複数のディスクに複製(ミラーリング)することで、ディスク障害が発生してもデータを失わないようにする
      • これにより、RDBMSはディスクの故障に対して高い耐障害性を持つことができる
    • パリティを使用したデータ保護(RAID-5、RAID-6)
      • RAID-5やRAID-6は、パリティ情報を使用してデータを保護する
      • これにより、単一または複数のディスク障害が発生しても、失われたデータを再構築することが可能
  • パフォーマンスの向上
    • データのストライピング(RAID-0、RAID-5、RAID-10)
      • RAID-0はデータを複数のディスクに分散(ストライピング)し、データの読み書きを並行して行うことで高速なアクセスを実現
      • RAID-5やRAID-10(ミラーリングとストライピングの組み合わせ)も同様に、パフォーマンスの向上を図ることができる
  • バックアップとリカバリの容易化
    • 障害発生時の迅速な復旧
      • RAIDを使用することで、ディスク障害が発生した場合のデータ復旧プロセスが容易かつ迅速になる
      • 特にRAID-1やRAID-5では、障害が発生したディスクを交換し、システムが自動的にデータを再構築することができる
  • スケーラビリティ
    • ストレージ容量の拡張
      • RAIDシステムは、データベースの成長に伴いストレージ容量を追加する際にも柔軟性を提供
      • 新しいディスクを追加することで、容易にストレージ容量を拡張できる

RDBMSのData管理実装

RDBMSは、page単位でdata管理を行い、論理block単位でOSファイルにデータを書き込む

  • Page
    • RDBMS内で実際のデータを格納する単位
    • データベースの操作において基本的なデータの読み書き単位
  • Logical Block(databaseの中でのblock)
    • OSファイル内のデータを論理的に区切る単位(要は、OSファイルとの関連付けをしている)
    • これらのブロックを使用してデータの読み書きを行う
  • OS file
    • OSによって管理されるファイル
+--------------------------------------+ 
|                                      | 
|              OS File 1               | 
|                                      | 
+--------------------------------------+ 
    ||                 ||            ||            
    ||                 ||            ||            
    \/                 \/            \/            
+---------------+ +---------------+ +---------------+ 
|Logical Block 1| |Logical Block..| |Logical Block N| 
+---------------+ +---------------+ +---------------+ 
    ||                 ||                ||            
    ||                 ||                ||            
    \/                 \/                \/            
+-------+           +------+          +------+
| Page 1|           |Page..|          |Page N|
+-------+           +------+          +------+

メモリ管理の原則

以下の主な理由から、メモリ管理の原則は、RDBMSのパフォーマンスにおいて非常に重要.

  • パフォーマンスの向上
    • データベースシステムは、ディスクからデータを読み書きする必要がある
    • メモリ管理を適切に行うことで、データのアクセス速度を高速化し、処理時間を短縮することができる
  • ディスクアクセスの最小化
    • ディスクアクセスを最小限に抑えることが重要
    • ディスクアクセスは非常に遅いため、データを必要なときに効率的にメモリに読み込むことで、処理時間を短縮することができる

RAMとの速度比較

  • フラッシュよりも1,000倍速い
  • ディスクよりも100,000倍速い

メモリ管理と実装

RDBMSにおいて、Page, Block, FileManagerは、メモリ管理とデータの効率的な読み書きにおいて重要な役割を果たす

  • Page
    • メモリ内のデータ管理
      • ページは、データベースシステムがメモリ内でデータを管理する基本単位
      • 各ページは固定サイズを持ち、データベースからのデータブロックを格納する
    • データの読み書き
      • データベースシステムは、ディスクからデータを読み込む際に、それをページに格納する
      • 同様に、データをディスクに書き戻す際にもページ単位で行われる
    • キャッシングとバッファリング
      • ページは、頻繁にアクセスされるデータをメモリ内に一時的に保持するために使用され、ディスクアクセスの回数を減らすことでパフォーマンスを向上させる
  • Block
    • ディスク上のデータの論理単位(block sizeがpageのsizeとなる)
      • ブロックは、ディスク上のデータを論理的に区切る単位
      • データベースシステムは、ディスク上のデータをブロック単位で管理する
    • データの読み書き
      • データベースはブロックを使用して、ディスク上のデータに効率的にアクセスする
      • ブロック単位でデータを読み込み、必要に応じて更新してディスクに書き戻す
  • FileManager
    • ディスクとのインターフェース
      • データベースシステムとディスク間のインターフェースを提供する
      • これにより、データベースはディスク上のファイルにアクセスし、データを読み書きできる
    • ファイル操作の抽象化
      • ディスク上のファイル操作を抽象化し、データベースシステムがOSのファイルシステムの詳細を意識せずにデータを管理できる
    • データの整合性と安全性
      • データの整合性と安全性を保つために、ファイルロックやトランザクションログなどの機能を提供する

実装周りの理解

select/updateのsequence chartを書いて page/blockid/filemgrが関連あるところをいろぬる

  • 起動時のSequence(TBD)
  • Select時のSequence(TBD)
  • Update時のSequence(TBD)

Discussion