2017-03-25 11 views
1

私は10年の鉱山経験のなかで、RDBMSをOracleまたはSQLサーバーのいずれかをデフォルトで使用していました。デフォルトで無効になっている結果キャッシュを決して調整しないでください(少なくともoracleで)。私は常に、キャッシュ・オプションとしてehcache/memcache/redisなどのアプリケーション・レベルでキャッシュ・オプションを使用しています。RDBMSの結果キャッシュとアプリケーションレベルのキャッシュ

質問DBサーバーで使用できるメモリ帯域幅があれば、パフォーマンスの問題に直面するかどうかにかかわらず、結果キャッシュ、つまりDBレベルを積極的に使用することは有効な選択肢ではありませんか?このクエリ結果の は、select * from employee where department = 'Finance'と言っても、常に金融部門に対応してキャッシュされます。

私の質問では、ハードウェアがLRUまたは特定の要件ごとに適切なアルゴリズムをサポートする場合、DBレベルのキャッシュを使用しないでください。 アプリケーションレベルのキャッシュを作成し、別のサーバーとして(memcachedのように)展開する必要があります。

+0

私の一般的なルール:キャッシュをキャッシュしないでください。データベースはあらゆる種類のキャッシュを行います。キャッシュの別のレイヤーを追加する必要はほとんどありません。 –

答えて

1

たとえば、ehcacheというアプリケーションレベルのキャッシングを使用すると、アプリケーションでネットワーク経由でデータを取得する料金を支払うことができなくなります。 (あなたのアプリケーションがあなたのRDBMSと同じマシン上にホストされていないと仮定して)

looking at the common latency in IT systemsについて考えると、おそらく既にあなたのアプリにとって大きな利益になっているはずです。

+0

合意。ここでのポイントは 'EHcache(私は既に頻繁に必要とするオブジェクトのために、DBからフェッチするのに費やされます)'と 'DBキャッシュ(コストがかかっていないか、使用されていないかもしれないdbオブジェクトのために、ワークフローに依存します)'です。ポイント私はここで、LRUを使ってDBキャッシュをいくつかの大きな値に設定しないようにして、コストの高いかどうかに関わらずクエリ結果の一部をIOコールの代わりにメモリからフェッチできるようにしています。少なくともそれは大きなものではないかどうか確かめるために少しでも違いを生みます。 – emilly

+0

はい、私はそれがあなたが何を描いているのか理解していると思います。しかし、それはあなたが設定して覚えている2つのキャッシュで終わるようにも聞こえる... –

関連する問題