1

私は、評価を行う前に何百万もの料金表をメモリにロードする評価システムに取り組んでいます。料金表のリストは毎日増え続けており (1 日に 20,000 レコードを超えることもあります)、ここ数週間からメモリの問題に直面しています。日付基準に基づいて特定の数の関税をロードすることも、いくつかのビジネス ルールにより実現不可能です。

ある種のキャッシング メカニズムを実装する方法はありますか (タリフをバッチに分割し、必要に応じてロード/アンロードします)。または関税リストをメモリマップするには?

データベースのフェッチに休止状態を使用しています。

4

3 に答える 3

0

あなたの問題は実際にはアルゴリズムの問​​題であり、メモリの問題ではないと思います。ツリーでデータを構造化し、特定の瞬間に交差するデータ ブランチのみをロードしてみてください。終了したら、そのブランチのデータをアンロードして、新しいブランチをロードします。これは私が見ている方法ですが、より良いアルゴリズムがあるかもしれません。これは確かに遅くなります。

于 2012-06-07T07:36:40.953 に答える
0

Java で何百万ものオブジェクトをロードおよびアンロードすることは常にメモリに対して重すぎます。また、ここでは休止状態が最良の選択肢ではないというジストロイにも同意します。

実際には、ストアド プロシージャまたはネイティブ実装のいずれかで、ロジックを Java の外に移動する行から考え始める必要があります。

于 2012-06-07T07:15:04.350 に答える
0

このような数値を処理する場合、問題に非常に正確に結び付けられた戦略を定義する必要があります。そのため、実際に何がメモリ内にある必要があるのか​​ 、読み取り/書き込み操作がわからないため、回答できません。

ロードとアンロードを正確に管理する必要がある場合、休止状態のようなものを使用するのは悪い考えであることはほぼ確実です。

あなたがすべき :

  • 評価要件を定義する (おそらく既に行われている)
  • 通常の方法ではできないことを確認してください(多数の評価システムと既知の戦略があります)
  • (たとえばhttps://softwareengineering.stackexchange.com/で)評価のアイデアが必要です
  • そうして初めて、RandomAccessFile と nio チャネル、jdbc とスマート ローディング、またはいくつかのクエリを使用する必要があるかどうかを判断できます。

レーティングは一般的に難しい理論上の問題であることに注意してください。たとえば、この興味深い記事を参照してください。

答えのより直接的な要素として、 RandomAccessFile とFileChannelを使用して、同時に開いている多くの 4 Go ファイルを非常に高速に読み書きできると思います。

于 2012-06-07T07:54:42.077 に答える