セッション、ユーザーメッセージなどを保存する必要がある Web アプリケーションを開発しています。HashMap または H2 データベースの使用を考えています。
パフォーマンスとメモリ使用率の点でどちらが優れているか教えてください。Web サイトは 10,000 人のユーザーをサポートする必要があります。
ありがとう。
セッション、ユーザーメッセージなどを保存する必要がある Web アプリケーションを開発しています。HashMap または H2 データベースの使用を考えています。
パフォーマンスとメモリ使用率の点でどちらが優れているか教えてください。Web サイトは 10,000 人のユーザーをサポートする必要があります。
ありがとう。
これらの質問でいつものように、私はあなたがそれが問題であると知っているとき/あなたがパフォーマンスについて心配するでしょう。
10000ユーザーは、メモリに保持するデータが多くありません。私はおそらく標準のJavaコレクションから始めて、それがあなたに悲しみをもたらすだろうと予測するときのパフォーマンスを見ていきます。
このJavaコレクションへのアクセスを抽象化して、置き換えたときに必要なリファクタリングがローカライズされるようにします(H2、Derby、Oracleなどのさまざまなソリューションでパフォーマンステストの前後を簡単に実行できるように、構成可能にします。 。など)
セッションオブジェクトが大きすぎない場合(これが当てはまるはずです)、データベースに永続化する必要はありません。
このためにデータベースを使用すると、数行のコードから始めることができる場合に、非常に複雑になります。したがって、データベースを使用せず、単にそれらをligthメモリ構造(HashMapなど)に格納します。
ユーザーが長い間離れたときにセッションをメモリに保持したくない場合は、HashMapをクリーンアップする方法を実装する必要があるかもしれません。多くの解決策が利用可能です(最も簡単なのは、バックグラウンドスレッドを時々削除して古すぎるセッションを作成することです)。通常、データベースよりもハッシュマップをクリーンアップする方が簡単であることに注意してください。
オブジェクトの保存に を使用するHashMap
際の問題は、サイトが 1 つのサーバーに対して大きくなりすぎて、需要に応じてスケーリングするためにクラスター化する必要がある場合に問題が発生することです。HashMap
次に、異なるサーバーでインスタンスを同期する方法に問題が発生します。
可能な代替手段は、データベースの構造を必要とせず、EHCacheなどの分散キャッシュ機能を使用することさえないため、 Redisのようなキーと値のストアを使用することです。
H2 と Hash Map の両方がデータをメモリに保持します (したがって、スペースの観点からは、それらはほぼ同じです)。
検索が KEY VALUE のように単純な場合は、ハッシュ マップでの検索がより高速になります。
KEY < 100 などの比較を行う必要がある場合は、H2 を使用します。
実際、10,000 のユーザー情報はそれほど大きな数字ではありません。
ユーザー メッセージを保存する必要がない場合は、コレクションを使用します。ただし、メッセージを保存する必要がある場合は、必ずデータベースを使用してください。再起動後、すべてのデータが失われたためです。