DBから同じデータを照会する代わりに、ハッシュマップにいくつかのデータをキャッシュし、そこからデータを取得する設計を実装しました。
私の考えは正しいですか?
DBから同じデータを照会する代わりに、ハッシュマップにいくつかのデータをキャッシュし、そこからデータを取得する設計を実装しました。
私の考えは正しいですか?
データのコピーをメモリに保持する方が、DB からフェッチするよりも確実に高速です。
とはいえ、考慮すべきさらなる考慮事項があります。
コレクションにヒットすることは、DB、特に別のサーバーにあるDBにヒットするよりも数桁速くなります(通信遅延のため)
それは言った:
データベースと対話するときに何が起こるかを考えれば、これに自分で答えることができます。
比較すると、ハッシュされたデータ構造のルックアップには、それぞれ数ナノ秒かかる場合があるいくつかのメモリアクセスが必要です。その違いは数桁です。
考慮すべき主な懸念事項は、キャッシュのサイズです。特定のしきい値を超えると、良いよりも多くのダメージを与えています。たとえば、キャッシュに 100 万のエントリがあり、各エントリが 1 KB である場合 (各オブジェクトのオーバーヘッドを考慮すると、到達するのはそれほど難しくありません)、1 ギガバイトのヒープを占有していることになります。その場合、主要な GC のパフォーマンスもひどいものになります。
コード レベルで行うよりも常に DB にアクセスするコストが高くなります。
このように見てください: データベースに問い合わせるには、とにかくバイトをメモリにコピーする必要があります。したがって、メモリにアクセスするだけで、データベースにアクセスするよりも常に高速になります。
ハッシュコードの計算コストが低い場合は、はるかに高速になるはずです。これは、エントリの数にも依存します (衝突が増えるため)。