統計または監視にEJB-@Singleton(javax.ejb.Singleton)を使用する必要がありますか、それとも共通の@ SessionScoped-Beanに統計をキャッシュする方がよいでしょうか?私の質問をクリアするために、ここに2つのシナリオがあります。
シナリオI:
ユーザーはWebセッションを開始し、統計またはデータテーブルを表示するためにデータベースクエリを実行します。これらのクエリは、そのセッション内で実行されます。したがって、10.000ユーザーは10.000の等しいデータベースクエリを作成します。
シナリオII:
ユーザーはWebセッションを開始し、事前に初期化された@Singleton-Beanから統計またはデータテーブルのデータを再試行します。@Singleton(javax.ejb.Singleton)は、Server-Startup(@Startup)の開始時にクエリを実行しました。したがって、10.000ユーザーは1つのキャッシュ(@Singleton)から読み取ることができ、データベースにクエリを実行する必要はありません。私の@Singleton-Beanは、他の誰かがデータを作成/編集/削除した場合に、キャッシュされたデータの更新をトリガーします。
だから私の質問は:
- シナリオIIはシナリオIよりもスケーリングが優れていますか?はい、そうですね。私は正しいですか?
- 他に考慮すべき注意事項や事柄はありますか?
- Stateless-Beansは、@statefulや@Singletonよりもはるかにスケールアウトします。@ Stateless-Beanを使用して、JPA /HibernateCachesなどでクエリをキャッシュすることを検討する必要があります。
- プロキシを使用するには、@ Singleton(javax.ejb.Singleton)の代わりに@ApplicationScoped(javax.enterprise.context)を使用する必要がありますか?それはもっと良いでしょうか?