これは、プログラミングで何度も遭遇する典型的なケースです。速度またはメモリ使用量を最適化する必要がありますか?
そして、そのようなすべての難問のように、「正しい」答えや完璧な解決策はありません。言い換えれば、あなたとあなたのクラスメートは両方とも問題に対するあなたの解決策に正しいです。
すべてのレコードをメモリにロードするソリューションでは、実行時にこれらの各レコードへのアクセスと変更を高速化するために、メモリを「使用」します。すべてのレコードをメモリ内の配列に格納するとスペースが必要になりますが、メモリアクセスはディスクアクセスよりもほぼ無限に高速であるため、クラスメートよりもはるかに高速に実行されます。
対照的に、クラスメートはハードディスクからオンデマンドでデータをロードするのを待つことでRAMを節約します。しかし、それは彼女にコストをかけることになります。ハードディスクをヒットすることは、すでにメモリにあるデータをフェッチすることに比べて非常にコストのかかるプロセスであり、ユーザーが変更を加えるたびにこれを行うのに行き詰まります。プログラムを開始するのにかかる時間と、すでに開いているプログラムに切り替えるのにかかる時間を考えてみてください。
そして、そこにはトレードオフがあります。ここで自問する重要なことのいくつかは次のとおりです。
(処理する一般的な構成の)データセットが大きすぎて(または大きくなりすぎて)、メモリに完全に収まりませんか?通常は小さなデータセットを処理している場合、コンピュータには、おそらくそれだけの価値がある十分なRAMが搭載されています。
データにアクセスできるようになるには、どれくらいの速さが必要ですか?リアルタイムアクセスは重要ですか?オンデマンドでハードディスクからロードするのに時間がかかりすぎる、特に大規模または複雑なデータセットですか?ユーザーはどのようなパフォーマンスを期待していますか?
アプリケーションはどのようなシステムを対象としていますか?組み込みシステムやその他の特殊なケースでは、独自の設計アプローチが必要になる場合があります。RAMが豊富で、固定ストレージの量が非常に限られている場合もあれば、まったく逆の場合もあります。標準の最新のPCハードウェアを使用している場合、ユーザーは何を望んでいるか、必要としているか、すでに持っていますか?ターゲットユーザーのほとんどがすでに比較的「ビーフィー」なハードウェアを使用している場合は、より多くの潜在的なオーディエンスをターゲットにする場合とは異なる設計上の決定を下す可能性があります。これらのトレードオフは、プログラムの表現されたシステムを通じて以前に明示されたものです。要件。
特別な状況を考慮に入れる必要がありますか?複数のユーザーによる同時アクセスのようなものは、すべてのデータをメモリに保持することをはるかに困難にします。他のユーザーは、ローカルコンピューターのメモリにのみ保存されているデータをどのように読み取ることができますか?ここでは、(おそらく共有サーバー上でも)共通ファイルを共有する必要があります。
他の部分よりも頻繁にアクセスされるデータの特定の部分はありますか?これらの特定の部分を常にメモリに保持し、残りを遅延ロードすることを検討してください(つまり、ユーザーがアクセスした場合にのみ、それらをメモリにフェッチしようとします)。
そして、その最後のポイントが示唆するように、バランスの取れた、または組み合わされたアプローチの何かは、おそらく「理想的な」解決策に到達するのとほぼ同じくらいです。アプリケーションのアイドル状態のときに、編集や変更をディスク上のファイルに定期的に書き戻しながら、できるだけ多くのデータをRAMに保存できます。平均的なプログラムは、その逆とは対照的に、ユーザーが何かをするのを待つのに多くの時間を費やします。これらのアイドル状態のCPUサイクルを利用して、目立った速度の低下を招くことなく、メモリに保持されているものをディスクにフラッシュして戻すことができます。このアプローチはソフトウェア開発で常に使用されており、EClaessonの回答で指摘された落とし穴を回避するのに役立ちます。アプリケーションがクラッシュしたり、予期せず終了したりした場合は、そのほとんどは、舞台裏ですでにディスクにコミットされています。
追記:もちろん、Dark Falconの答えは正しいです。本番アプリケーションでは、データベースのようなものを使用してデータを処理する可能性が高いということです。しかし、これは教育目的のように思われるため、各アプローチの背後にある基本的なトレードオフを理解することがはるかに重要だと思います。