磁気ディスクと半導体記憶装置,そしてファイル設計

昔話です.
エビちゃんとかはしゃいでいる私ですが,実は結構おじさんです.残念!!!!
そんなわけで (?),仕事を始めた頃はまだまだメインフレームが全盛期だったりしました.
メインフレームとはいえ,昔々のハードウェアは今時の PC なんかよりずっと貧弱で,CPU は遅いし,メモリは少ないし,ディスクも遅いし...
そんな時代でも,お金のあるユーザは「半導体記憶装置」というものを導入していました.ディスク装置と同じインタフェースを持っていますが,中身は半導体メモリという代物です.バックアップで磁気ディスクも入っていましたけれど.
もう 20 年近く前の話ですが,とあるシステムでは 1 台あたり 5GB のメモリを積んだ半導体記憶装置がゴロゴロ転がっていましたねぇ.20 年前の 5GB って,今だとどれくらいの感覚でしょう? 当時の PC はメモリ 1MB 位だったでしょうか? 今は 1GB も普通だと思うので,単位が一つずれている感じでしょうか.とすると,当時の 5BG は今の 5TB くらい? それだけのメモリを積んだ箱がゴロゴロしているといえば,その贅沢さを感じ取って頂けるでしょうか?


私がこのお金のあるユーザのシステム開発で残業 150 時間くらい (これくらいでは忙しいとは誰もいってくれない時代,同じ頃?はぶさんは300時間くらい残業していたらしい) を延々続けていた頃 (当時のプロジェクトは今よりずっと長い,2 年とか 3 年とか),ひとりの後輩が手伝いということで駆り出されてきました.
その後輩が,「こんなレベルの低い開発はイヤだ! やってらんねー!!」みたいな事を言い出しました.
どのあたりがレベル低いのか,話を聞いてみると「やたらとディスクアクセスしてる」というわけです.彼が元々担当していたシステムでは,ファイル設計を工夫してディスクアクセスを極力減らすために努力していたとのこと.しかし,ここではそんなことやっていないのが許せない,それじゃファイル設計のスキルが身に付かない,というわけです.
確かにねー,当時のディスクは本当に遅かったのです.平均回転待ち時間が 30〜50 ミリ秒くらいだったかなぁ?
当時はネットワークも遅くて,適切なターンアラウンドタイムを実現するにはホスト (サーバ) 側に許される処理時間ってすごく短かったのです.なので,その後輩が言うように,頻繁にディスクアクセスしていてはまともなシステムは作れないはずでした.
しかし...
そのシステムでは半導体記憶装置を使っていたのです.金持ち A 様のシステムだったのです.
半導体記憶装置には,ディスクの回転待ち時間もシーク時間もありません.代わりにアクセス時間の大部分を占めるのは,データの転送時間です.これは,転送するデータのサイズに比例します.
このため,ファイル設計の方針がディスク装置を使う場合とは全く異なってくるのです.


ディスク装置を使う場合は,回転待ち時間およびシーク時間が問題になるため,可能な限りディスクにアクセスする回数を減らすようにファイルを設計します.一つのレコードに,あらゆる業務で必要な項目を詰め込むのです.余計なデータが付いてきてもいいから,アクセス回数を最低限にするのです.
対して,半導体記憶装置を使う場合は転送速度が問題になるため,レコードのサイズが小さくなるようにファイルを設計します.特定の業務でしか使わない項目は,別のファイルに分けていくのです.アクセス回数が増えてもいいから,余計なデータを持ってこないようにするのです.
ディスク装置でのレコードはいろいろな業務の公倍数で,半導体記憶装置のレコードはいろいろな業務の公約数だという感じでしょうか.全然違うでしょう?
先の後輩君は,条件が変われば正しいファイル設計も変わるということに気づかなかったのですね.ま,よくあることです (だよね? よくあるよね?).


こんなことを思い出したのは,昨日書いたロングキャッシュのおかげです.
ロングキャッシュを使わない DB アクセスは,ディスク装置へのアクセスに似ている気がします.RDB へのアクセスを最小限にすることを第一に考えます.テーブルを JOIN して,必要な情報をできるだけまとめて取得しようとします.
ロングキャッシュを使う DB アクセスは,半導体記憶装置へのアクセスに似ている気がします.Hibernate が ID だけを取ってくるような SQL を生成するように,その時その時で必要最低限の情報だけを取得することを第一に考えるようです.
と,理屈では分かっているつもりなのですが,なかなかそれを受け入れることが出来ません.やっぱり結果セットを大きく取ってくるような SQL を実行してくれると気持ちが落ち着くというか安心してしまいます.
細切れに SQL を発行されると「ぐはぁっ」となっちゃうのです.
それじゃ先の後輩君じゃないかぁ.残念!!!!
まぁ,今のところはまだロングキャッシュの有効性に疑問符付きなんで,いいわけも出来るのですが...
ロングキャッシュの有効性が確認できたらいつでも頭を切り換えられるようにしておかねば.