2016-05-30 53 views
2

我試圖建立一個Spring /春天Boot- RESTful Web服務,春天RESTful Web服務 - 高容量的數據處理

  1. 它接受一個CSV 100萬行/列40各行中的文件作爲輸入(來自基於Angular的前端)並且將是同步調用。在進入其他屏幕之前,必須通知用戶上載狀態。所以,等待時間不能超過幾分鐘(比如5分鐘)。

  2. 這些行中的每一行都必須針對數據庫中的內容進行驗證,並且如果發現有效,則會將相同內容插入到數據庫中。總之,每一行可以是一個獨立的獨立交易。

你可以請建議什麼是最好的方法來實現這個?

當前遺留系統在存儲過程中實現相同的功能,這使得解決方案與數據庫緊密耦合,如果RDBMS需要隨時更改,這將是一個問題。

  1. 在異步Web服務調用中處理這些1百萬數據塊(比如20k)的任何方法?

  2. 春季批次?

  3. 存儲過程可能比上面兩個選項更適合和更好地執行任何機會(猜不到!)?

你能否請一些至少和存儲過程一樣好的方法以及如何基於建議的解決方案進行水平縮放。

+0

你的API調用取決於API響應嗎? –

+0

您可以實現彈簧批處理 - 使用塊處理和主從設置進行並行處理並批量更新它們(不同的失敗和成功記錄)。或將每個記錄存儲在臨時表中,然後調用過程來批量插入它們。 – surya

+0

適當縮放網格大小,並有一個很好的例子,你可以參考http://www.mkyong.com/spring-batch/spring-batch-partitioning-example/ – surya

回答

1

您的三條建議選項正處於正確的軌道上。不幸的是,你的問題的答案是它取決於

以上任何一種方法都適用於您。我個人比較喜歡Spring Batch,因爲我發現編程模型簡單直觀。

Spring Batch Processing Guide


另一種方法將是使用Messaging並行行的處理:

  1. 控制器接收包含大量數據的CSV文件
  2. 分割數據分成更小的塊併發送到臨時消息隊列
  3. 多個工作節點接收消息並進行處理他們
  4. 監視臨時隊列的大小和更新相應的用戶(%完成)

總之,你自己的域名的知識最終將引導你走向爲您的企業的最佳解決方案。

+0

不想考慮MQ的原因它增加了另一個失敗點(當MQ服務器/高負載出現問題時),而對於成百上千的數據行卻可以在沒有它的情況下處理。如果同樣需要在春季批量完成,任何人都可以建議,我們如何跟蹤哪個工人正在處理哪一行?如何避免多個工作人員處理相同的數據? – Anand