データアクセスパスのパターン化

デザインパターンというものがある。classをデザインするときのパターンを汎化してまとめたものである。多くのデザインがこのパターンのどれかに近いもので実現できる。

データアクセスパスも同じようにパターンを型として理解しておけば、その型をベースに多様な状況に対応できる。

下記にデータアクセスをパターン化して型として整理する。

概要(型の使い方)
  • 下記”1.アクセスパターン”でどのパターンに該当するか判断する。
  • 下記”2.IO時間の計算”とアクセスパターンから処理時間を算出する。
  • RDB等でメモリヒット率の影響が大きい場合は、下記3のメモリヒット率を考慮して算出した処理時間を調整する。
  • 同様に下記4、5、6、7を考慮して算出した処理時間を調整する。

1.アクセスパターン
  • 10%以上取得する場合
    • フルスキャン
  • 10%以下の場合
    • クラスタ化あり
      • レンジスキャン
      • ランダムアクセス+レンジスキャン
    • クラスタ化なし
      • ランダムアクセス

参考)サイジング:ストレージ

2.IO時間の計算

  • フルスキャン
    • データサイズ ÷ シーケンシャルIO性能
  • レンジスキャン
    • ヒット件数÷ ブロックサイズ × シーケンシャルIO性能
  • ランダムアクセス
    • ヒット件数× ランダムIO性能
参考)サイジング:ストレージ

3.メモリヒット率を考慮
  • インデックスアクセスはヒット率80%として計算(つまり処理時間は処理時間×0.2となる)。

4.JOINの場合

下記のようなJOINのパターンが有り得る。それぞれのテーブルのヒット件数をパラメータとして上記2から算出する。

  • フルスキャン → フルスキャン
  • インデックスアクセス → フルスキャン
  • フルスキャン → インデックスアクセス

5.CPU負荷を検討する場合

下記のようにCPUが処理するレコード件数を考慮する。

  • where句で処理するレコード件数
  • 関数で処理するレコード件数。

参考)ETLのサイジング:CPU

6.ソート負荷の考慮
  • インデックスを使ってorder byの並びでデータを取得できる場合はソート負荷を0にできる
  • メモリが十分な場合
    • ソート負荷はソート対象のレコード件数に依存。コストはCPU負荷。
  • メモリが不十分な場合
    • マージソートのIO負荷を考慮

参考)ETLのサイジング:メモリ の ”メモリが不足した場合はどうなるか?”

7.同時アクセスの待ち時間を考慮する場合
参考)システム設計で待ち行列理論を活用する

前提
  • 基本的な考え方の理解を目的としているため、インデックス部のアクセス時間や、ディスクキャッシュヒット率等の詳細はここでは考慮しない。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です