2015-06-04 68 views
0

在Grails中,我有一個非常耗時的任務,它只讀取大約1000個csv文件,每個文件每行包含一個字。然後它讀取每個文件並將每行字移動到數據庫。Grails在控制器和另一個線程中執行耗時的任務

如果我在控制器(主線程)或控制器中產生的另一個線程中執行此任務,會消耗什麼內存差異?

我已經面臨內存不足的錯誤,由於其中的jvm完全退出了現場網站,我不得不重新啓動Tomcat。

難道這是由於控制器線程中耗時的任務(因此消耗的內存更多)?

P.S.我更感興趣的是找到控制器線程和控制器中創建的另一個線程在內存中的差異。

回答

0

這取決於您的總體要求,負載(您多久這樣做),架構,可用的軟件和硬件。

首先,這通常是ETL(提取變換加載)系統的任務。如果你買不起一個(或者你的老闆嚴格禁止),你可以使用其他幾種方法來卸載控制器。

  1. 專用服務器 - 將此DB加載到另一個盒子上。定義溝通渠道。加載完成時異步獲得通知並將此信息傳遞給用戶。

  2. 正在處理中。這是當你剛產生另一個線程(或多個線程)來完成繁重工作時。 GPars可能會在這裏解救。

  3. 您也可以使用內置的異步功能的Grails作爲指定here

回到你原來的問題。我甚至不會考慮在控制器中加載100s的CSV。如果我要實現這一點,我肯定會選擇ETL,因爲它最適合這類任務。

相關問題