はじめに
ディスクアクセスは遅い、メモリアクセスは速い。
なにかのパフォーマンスを考える際のひとつの指標としてよく言われる話です。でも、「なぜディスクアクセスは遅いんですか?」と突っ込まれて聞かれると回答に窮します。具体的にどういう理由でディスクのアクセスがメモリに劣るのかを深堀りします。
ディスクの種類と仕組み
ディスクにはHDDとSSDがあります。
- HDD
- Hard Disk Drive
- 円盤型の磁気ディスクとディスクを読み取るための磁気ヘッドを組み合わせたドライブ
- SSD
- Solid State Drive
- NANDフラッシュ回路を用いたドライブ
HDDは磁気ヘッドが対象のディスク位置まで物理的に移動する時間を要します。SSDは電子回路なので物理的移動時間はありませんが、回路上にあるセルと呼ばれる領域にビット単位でデータを保持します。
HDDは磁気ヘッドの移動時間があるのでSSDより低速です。じゃあSSDがとても速いのかと言われるとそんなことはなく、メモリアクセスのほうが速くなります。
HDD < SSD < RAM(メモリ)
メモリ
メモリはRAM(Random Access Memory)と呼ばれる領域に保持されます。メモリはCPUと直接接続されているため、高速なデータ読み書きが可能です。HDDやSSDはCPUと直接接続はされていないため、メモリほど高速な読み書きはできません。
代わりに、メモリ上に保持したデータはシャットダウンと同時に消失します。一方でHDD,SSDに保存されたデータは永続化されるためシャットダウン後も残り続けます。データの揮発性の違いですね。
インメモリxxと呼ばれるミドルウェア
インメモリDB、インメモリキャッシュなどのミドルウェアは、メモリ上で動作するDB/キャッシュということです。メモリ上にあるということはデータが揮発するリスクがあるのではないか?と感じますが、必ずしもそうではありません。
例えば、インメモリDBのRedisなどは定期的に裏でデータの永続化を実施しておりデータが揮発しないように設計されています。スナップショットを取ったり、AOF(Append Only File)というデータ書き込み履歴を管理するログファイルを用いたりしています。