2014-11-05 31 views
2

我正在開發spring-mvc應用程序。處理超過100k條記錄的數據

我必須處理超過10萬條數據記錄的要求。我不能讓它依賴數據庫,所以我必須在java中實現所有的邏輯。

現在我創建的線程數,每個線程來處理分配的發言權1000條記錄。

我使用org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor

列表項

問:

  1. 建議數,我應該使用的線程。
    • 我應該平分的記錄數量的線程之間或
    • 我應該給的記錄預定數量給每個線程,增加線程數?
  2. ThreadPoolTask​​Executor類是確定的,或者我應該用別的東西嗎?
  3. 我應該維護分配給java或數據庫中每個線程的記錄ID嗎? (注意:如果使用數據庫的話,我必須作出額外的數據庫調用每個記錄和處理該記錄後更新)

任何一個可以請建議我在這種情況下的最佳實踐。

任何類型的建議都會很棒。

注意:執行時間是主要關心的問題。

更新:

處理包括數據庫調用的擁抱數量。 意味着你可以認爲它是在java中完成的搜索。取一條記錄,然後比較(在java中)該記錄與來自db的其他記錄。然後再次採取另一個記錄,並做同樣的事情。

+2

計算和I/O之間的平衡是什麼?如果你只是用一個線程來運行它,處理器(或處理器)有多忙?多線程會產生成本 - 如果您按順序閱讀,操作系統可能會更好地執行預取。 – 2014-11-05 07:22:41

+6

這一切都取決於「處理記錄」的含義。任務IO綁定還是CPU綁定?如果您需要每個線程的數據庫連接,那麼您的池中有多少個數據庫連接?你用一根線測量了花費的時間嗎?因爲100K不是*那麼多。 – 2014-11-05 07:24:04

+0

請找到我更新的問題。 – 2014-11-05 07:37:11

回答

1

爲了處理大量的數據,你可以使用Spring Batch的框架。
檢查此Doc
維基page

0

ExecutorService的應該是對你罰款,沒有必要使用彈簧。但線程號碼將是一個竅門。我只能說,這取決於,爲什麼不嘗試找出優化的數字?

相關問題