システムの性能を上げるにはどうしたらいいか。を考えてみる。
まだメモです。このあと、精査したり、まとめたり、例示したりしたい。編集リクエストはこの時点から歓迎します。
攻め方
- プロファイルを取る: 対処すべき、時間が長い処理の整理のため
テクニック
- 分散させる: マルチスレッド、MapReduce、グリッドコンピューティング
- 待ち合わせを減らす:
- 待つ順番を揃える: P5352421
- できるだけ手前で刈り込む: SQLチューニングで、効果の高いインデックスを先に使うやつ
- できるだけ手前で打ち返す:
- なめる量を減らす: SQLのインデックス
- なめる速さを上げる:
- 薄くする:
- 短くする:
- 一度にやっつける: ベクトル、SIMD、GPGPU、
- 事前にまとめる: マイクロバッチ、ネッティング
- 粗くざっくりやる:
- 速いやりかたにする: バイナリサーチ、51EB851F、FPGA
- 事前に分けておく
- 前倒し着手する:
- 投機的に実行する: HFTの応答
- 同時並行で処理する: CPUパイプライン
- 速いやつを使う: フラッシュストレージ
- 近くする: キャッシュ、レジスタ
- 待たない: HTTPパイプライン
- やりすぎない
- 簡単にやる、手抜きする
- そもそもやらない
- 必要なことだけやる
- 捌き屋を入れる
- エンジンを増やす
- 無駄を省く
引用元、参考資料
- トヨタ、リーン、アジャイルの無駄
- データベースの高速化
- YAGNI、KISS、
- アルゴリズムの高速化、枝刈りとか
- ハードウェアの高速化
- キャッシュ
- GPGPU、FPGA、SIMD命令、HFTでの投機的応答
- 51EB851F