Spring Batch 批處理原則與建議


Spring Batch 批處理原則與建議

當我們構建一個批處理的過程時,必須注意以下原則:

  1. 通常情況下,批處理的過程對系統和架構的設計要夠要求比較高,因此盡可能的使用通用架構來處理批量數據處理,降低問題發生的可能性。Spring Batch是一個是一個輕量級的框架,適用於處理一些靈活並沒有到海量的數據。

  2. 批處理應該盡可能的簡單,盡量避免在單個批處理中去執行過於復雜的任務。我們可以將任務分成多個批處理或者多個步驟去實現。

  3. 保證數據處理和物理數據緊密相連。籠統的說就是我們在處理數據的過程中有很多步驟,在某些步驟執行完時應該就寫入數據,而不是等所有都處理完。

  4. 盡可能減少系統資源的使用、尤其是耗費大量資源的IO以及跨 服務器 引用,盡量分配好數據處理的批量。

  5. 定期分析系統的IO使用情況、SQL語句的執行情況等,盡可能的減少不必要的IO操作。優化的原則有:

    1. 盡量在一次事物中對同一數據進行讀取或寫緩存。
    2. 一次事物中,盡可能在開始就讀取所有需要使用的數據。
    3. 優化索引,觀察SQL的執行情況,盡量使用主鍵索引,盡量避免全表掃描或過多的索引掃描。
    4. SQL中的where盡可能通過主鍵查詢。
  6. 不要在批處理中對相同的數據執行2次相同的操作。

  7. 對於批處理程序而言應該在批處理啟動之前就分配足夠的內存,以免處理的過程中去重新申請新的內存頁。

  8. 對數據的完整性應該從最差的角度來考慮,每一步的處理都應該建立完備的數據校驗。

  9. 對於數據的總量我們應該有一個和數據記錄在數據結構的某個字段 上。

  10. 所有的批處理系統都需要進行壓力測試。

  11. 如果整個批處理的過程是基於文件系統,在處理的過程中請切記完成文件的備份以及文件內容的校驗。

批處理的通用策略

和軟件開發的設計模式一樣,批處理也有各種各樣的現成模式可供參考。當一個開發(設計)人員開始執行批處理任務時,應該將業務邏輯拆分為一下的步驟或者板塊分批執行:

  1. 數據轉換:某個(某些)批處理的外部數據可能來自不同的外部系統或者外部提供者,這些數據的結構千差萬別。在統一進行批量數據處理之前需要對這些數據進行轉換,合並為一個統一的結構。因此在數據開始真正的執行業務處理之前,可以先搭建批處理任務將這些數據統一轉換。

  2. 數據校驗:批處理是對大量數據進行處理,並且數據的來源千差萬別,所以批處理的輸入數據需要對數據的完整性性進行校驗(比如校驗字段數據是否缺失)。另外批處理輸出的數據也需要進行合適的校驗(例如處理了100條數據,校驗100條數據是否校驗成功)

  3. 提取數據:批處理的工作是逐條從數據庫或目標文件讀取記錄(records),提取時可以通過一些規則從數據源中進行數據篩選。

  4. 數據實時更新處理:根據業務要求,對實時數據進行處理。某些時候一行數據記錄的處理需要綁定在一個事物之下。

  5. 輸出記錄到標准的文檔格式:數據處理完成之后需要根據格式寫入到對應的外部數據系統中。

以上五個步驟是一個標准的數據批處理過程,Spring batch框架為業務實現提供了以上幾個功能入口。

數據額外處理

某些情況需要實現對數據進行額外處理,在進入批處理之前通過其他方式將數據進行處理。主要內容有:

  1. 排序:由於批處理是以獨立的行數據(record)進行處理的,在處理的時候並不知道記錄前后關系。因此如果需要對整體數據進行排序,最好事先使用其他方式完成。

  2. 分割:數據拆分也建議使用獨立的任務來完成。理由類似排序,因為批處理的過程都是以行記錄為基本處理單位的,無法再對分割之后的數據進行擴展處理。

  3. 合並:理由如上。

常規數據源

批處理的數據源通常包括:

  1. 數據庫驅動鏈接(鏈接到數據庫)對數據進行逐條提取。
  2. 文件驅動鏈接,對文件數據進行提取
  3. 消息驅動鏈接,從MQ、kafka等消息系統提取數據。

典型的處理過程

  1. 在業務停止的窗口期進行批數據處理,例如銀行對賬、清結算都是在12點日切到黎明之間。簡稱為離線處理。

  2. 在線或並發批處理,但是需要對實際業務或用戶的響應進行考量。

  3. 並行處理多種不同的批處理作業。

  4. 分區處理:將相同的數據分為不同的區塊,然后按照相同的步驟分為許多獨立的批處理任務對不同的區塊進行處理。

  5. 以上處理過程進行組合。

在執行2,3點批處理時需要注意事物隔離等級。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM