![](/img/trans.png)
[英]Best efficient data structure to store URIs for a web Crawler in Java
[英]Best way to design web service, which have to store data from requests in list or similar structure
我的目標是創建Java EE Web服務,該服務將同時處理數千個(或將來更多)請求,並且必須將請求中的數據存儲在列表或類似結構中。 我想將請求中的對象存儲在內存中,但這不是必須的。 將從每個請求中提取一些對象,並將其添加到所選的數據結構中。 Web服務將具有兩個操作:添加到結構和從結構中刪除。 刪除請求將包含對象實例變量的值。 可能是唯一ID或其他一個或多個實例變量。 始終有一個要刪除的對象(如果請求無效,則為0)。 具有相同實例變量值的對象將被刪除。
我的想法是使用兩個EJB。 首先是@Stateless並公開為Web服務。 它將從請求中提取對象,並調用第二個EJB從數據結構中添加或刪除請求的對象。 第二個EJB將是@Singleton,並將具有從請求中提取的對象的實例變量ArrayList <>。 正如我所說的,它根本不必是ArrayList或List。
我還考慮過使用一個EJB,它必須是@WebService @Singleton,但是文檔說這種組合是“可能的,但是……未由本規范定義”。
Arjan,您的要求尚不完全清楚。 假設您正在構建每秒處理1000個請求的高負載應用程序,我將這樣做:
Servlet的處理
單例EJB
TimerEJB
解決方案的好處:
退稅:
您不能在WS上使用@Singleton,因為容器可能會初始化多個實例來處理大量請求。
您的@Singleton bean無法使用ArrayList <>,因為將存在並發訪問。 您應該改用ConcurrentLinkedQueue。 如何識別您的刪除操作請求? 也許ConcurrentHashMap會更好。
除非您將請求轉儲到數據庫或文件中,否則遲早如果要“成千上萬(或將來會有更多)”,將耗盡內存。 使用JPA的數據庫將是最簡單的,您只需在WS和Request對象上添加少量注釋即可實現它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.