2011-04-16 163 views
3

在我的Web應用程序中,我有一部分需要不斷抓取Web,處理這些數據並將其呈現給用戶。所以我想知道是否將它分成兩個獨立的應用程序,其中一個可以執行爬網,數據處理並將數據存儲在數據庫中。另一個應用程序將是一個Web應用程序(安裝在某個Web服務器上),它將向用戶呈現來自數據庫的數據並允許他與數據進行某種交互。兩個不同的Java應用程序共享相同的數據庫

我認爲我需要這個拆分的原因是因爲如果我對我的web應用進行了某些更改(如添加新功能,更改接口等),我不希望爬行被中斷。

我的應用程序堆棧是Tapestry(web層),Spring,Hibernate(通過MySQL)和我自己的履行程序獨立於其他人的實現。

僅僅使用相同的數據庫就可以完成整合嗎?這可能會導致同時從這兩個應用程序訪問數據庫的問題。或者可以在Hibernate級別完成集成,所以這兩個應用程序可以使用相同的Hibernate會話?但是,來自一個JVM實例的應用程序是否可以從另一個JVM實例訪問該對象?

我將不勝感激任何有關此事的建議。

UPDATE

用戶(從Web應用程序界面)將進入履帶解析網址。抓取工具應用只會讀取網頁應用填充的網址表格。反之亦然,抓取工具處理的數據只會顯示在用戶界面上。所以,我認爲我不應該擔心任何類型的鎖定,對吧?

感謝, 尼古拉

回答

1

我肯定會保持它們分開就像你計劃。網絡爬行比請求驅動的Web應用程序更像是一個「批處理」過程。 Web爬行應用程序將運行在其自己的JVM中,並且您的Web應用程序將在servlet/Java EE容器中運行。

爬行器運行的頻率如何?或者它是一個持續運行的進程?您可能需要根據您的要求考慮頻率。

Web應用程序的用戶是否會更新抓取工具將數據發佈到的相同表格?在這種情況下,您需要採取預防措施,否則可能會出現潛在的死鎖。如果您希望您的Web應用程序根據表中的新插入自動刷新數據,則可以創建一個消息驅動Bean(使用JMS)從爬行器應用程序異步通知Web應用程序。當新的數據插入消息到達時,您可以在頁面上進行表單提交或使用ajax更新頁面上的數據。

網絡應用程序應該使用連接池並且批量應用程序可以使用DBCPC3P0。我不確定在這種情況下嘗試共享數據庫會話會獲得多少好處。

通過這種方式,您可以在兩個應用程序之間進行集成,而不會相互減速,等待其他人處理。

HTH!

+0

非常感謝您的回覆!用戶會插入抓取工具的網頁URL進行抓取,但抓取工具應用只會讀取該表格,而不是以任何方式更新。謝謝! – Nikola 2011-04-16 19:42:54

1

你是對的,將應用程序拆分爲兩個可能對你來說是合理的。分成兩個應用程序的

缺點 -

  • 您不能在休眠或者是從它們中的任何一個都應用修改任何其他緩存可變對象緩存。樂觀鎖定應該適用於兩個休眠應用程序。我沒有看到任何其他問題。

您已在代碼中指定的優點。

相關問題