1

クエリ結果を取得するために別のクラス (DAO) を呼び出すクラス ClassA があります。特定のビジネス シナリオでは、

ClassA はクエリ パラメータを使用して DAO を約 20,000 回呼び出します。このうち約 10,000 回、ClassA は同じクエリ パラメータのセットを DAO に送信します。明らかに、結果セットは同じになり、キャッシュできます。

以下は私が実装したコードです。

Class A

{

.
.
.
.

Map<String, CachData> cachDataMap= new HashMap<String, CachData>();

priavate void getQueryResults(String queryParam)    
{

try {


            Set<String> cacheSet = cachDataMap.keySet();
            CachData cachData = null;
            if(!cacheSet.contains(queryParam))
            {
                dao.getResuslts((queryParam)));
                cachData = new CachData();
                cachData.setResult0(__getStringResult(0));
                cachData.setResult1(__getStringResult(1));
                cachData.setResult2(__getStringResult(2));
                cachData.setResult3(__getStringResult(3));
                cachData.setResult4(__getStringResult(4));
                cachData.setResult5(__getStringResult(5));
                cachDataMap.put(queryParam, cachData);
            }else
            {
                cachData = cachDataMap.get(queryParam);
            }



        } catch(Exception e) {
            //handle here
        }


}

フレームワークを使用する以外に、他に良い解決策はありますか? より良いデータ構造またはより良い方法.. 良いパフォーマンスのために?

4

2 に答える 2

1

ehcacheを使用できます。

何をするにしても、マップをキャッシュのインターフェースとして使用しないでください。優れたキャッシュ インターフェイスにより、実装でキャッシュのクリーンアップが可能になります。Map コントラクトはこれを許可しません。

実装に応じて、クリーンアップはキャッシュ内の時間に基づいたり、使用統計やメモリの可用性に基づいたりすることができます...

ここで使用している Map アプローチは、長期間使用するとメモリ不足になりやすいようです。

于 2012-12-14T06:53:44.717 に答える
0

guavaライブラリの Table を使用し、ehCacheを使用してオブジェクトをそのまま保存し、キーをクエリにすることができます。

于 2012-12-14T06:51:58.107 に答える