1

辞書へのアクセスを提供する Web サービスを作成する必要がある場合は、リクエストごとに SQL クエリを起動するのではなく、以前の結果をメモリに保持し、エントリが実行されていない場合にのみ DB にアクセスすることをお勧めします。今まで依頼。

しかし、この方法では、私の辞書が増加し、メモリ内の完全な SQL テーブルになります。

各エントリの使用頻度に基づいて、一種の辞書のクリーニング パターンを探していました。しかし、「最終アクセス時間」はそれを行うのに良い方法ではなく、ヒット数も時間とともに増加し、辞書のエントリの現在の平均使用量を反映していないためです。

DBアクセスを可能な限り節約するために破棄するエントリを知る方法はありますか?

4

3 に答える 3

0

「私の辞書は増えて、メモリ内の完全なSQLテーブルになります」-メモリ内の完全なSQLテーブルをどのように定義しますか。固定メモリサイズを定義することは可能ですか?はいの場合、おそらくその固定サイズの優先キューを作成できます。ポップアウトする最初の要素は、ヒットの頻度が最も低い要素である必要があります。これは、Comparable/Comparatorインターフェイスを使用して行うことができます。キューがいっぱいで、着信要素を挿入する必要がある場合は、queue.pop()をトリガーしてから、着信要素を挿入します。このようにして、最も使用頻度の低いものを掃除し続けることができます。

于 2012-10-05T17:23:45.907 に答える
0

この問題を正確に解決するオープンソース製品はたくさんあります。負荷の高いサイトでmemcachedredisを使用した経験があります。

于 2012-10-05T08:14:41.940 に答える
0

最も一般的なのは「LRU」で、これは「Least Recent Used」を表します。これはあなたが参照する「最終アクセス時間」であり、実際には非常にうまく機能します。

ウィキペディアにはさまざまな戦略の例がたくさんあります。おそらく、あなたに合ったものを見つけることができます: http://en.wikipedia.org/wiki/Cache_algorithms#Examples

于 2012-10-05T17:11:52.170 に答える