アプリケーションにカウンターのマップ (Map など) を実装する必要があります。ただし、この構造体は複数のスレッドからアクセスされることになっています。
適切な解決策ではないようConcurrentHashMap<Key, Long>
ですよね?
代わりに考えましConcurrentHashMap<Key, AtomicLong>
た。
しかし、問題があります。インクリメントのリクエストは均等に分散されません。このデータ構造に対するすべてのインクリメント リクエストの最大 95% を占める最も一般的なキーはほとんどありません。
私が理解している限り、これは単一AtomicLong
インスタンスへの同時アクセスにつながり、多くのロックが発生して効率が多少低下します。
質問 1:もっと良い解決策はありAtomicLong
ますか?
質問 2:構造を定期的に (おそらく 1 分ごとに) ディスクに永続化し、その「実際の」状態を永続化したい (最近の更新はすべて解決されていますか?) - 最も簡単な方法は何ですか?