- 締切済み
非機能要求のトレードオフ(アーキテクチャ設計)
客先からあがっている非機能要求に、「処理速度」と「メモリ使用率」が並んでいます。対象となっているシステムは、大きなファイルの読み込みをするので、最初に全部読み込んでメモリに展開し、その後はメモリのデータを読むことによって妥当な「処理速度」を達成しようとしましたが、そうすればメモリ使用率が上がってしまい、結局、処理速度が落ちてしまうもんですよね。同時にそこそこ妥当な線で達成する方法は、ありますでしょうか。システムの詳細は書けないですが、マルチスレッドやトランザクション、通信などはあまり関係のないシステムで、設計対象は、ただ膨大なデータをひたすら計算するだけって感じです。まだアーキテクチャの勉強を始めたばかりで、どの点を抑えるべきなのかがわかりません。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- a-saitoh
- ベストアンサー率30% (524/1722)
回答No.1
大きなデータファイルを読むといっても先頭から順に処理してゆくだけなら、全体をメモリに置く必要はありません。 具体的な処理内容と、使用可能メモリ量と、ファイルサイズを書いていただけない限り、これ以上の助言は出来かねます。 というか、そもそも、使用するハードウェアの搭載メモリ量は決まっているのでしょうか? そもそも非機能条件としてメモリ使用率が上がっていること自体が間違いではないでしょうか?メモリは、余したからといってうれしいことは何も無いですが。使いすぎて仮想記憶が働き出したらだめですけどね。
補足
早速のご回答、ありがとうございました。説明不足でしたので、何点か補足します。 ・具体的な処理内容 読み込むファイルには、計算条件のパラメータや、計算に使う基礎データが入っています。一定項目が繰り返し格納されているのではなく、全て別個のデータです。「先頭から順に処理」というわけでもないです。例として入力がXMLファイルとすると、タグAのシンボルaは、各機能のいたるところで使われたり、タグBのシンボルbと演算されて、タグCのシンボルcを更新する、というような処理イメージです。入力ファイルを読んで、演算して、更新したデータをファイルとして出力します。プログラム実行中、何度もファイルアクセスするのは遅いので、最初にメモリに入れようと考えています。 ・ファイルサイズ ファイルサイズは、3次元格子ごとのデータがあったりするので最大で400MBくらいのオーダーです。 ・使用可能メモリ量 使用するハードは、2GBだそうです。(厳密に2GBでなければダメというわけではなく、逆に「○○GBはないと、このプログラムは厳しいです」という提言も聞くだけは聞いてくれそうな感じです) スワップを起こさずストレスを感じさせない程度、という見積もりが定量的にできません。