表數據個性化導出文件

表數據導出文件,是信息系統中比較常見的數據處理場景,多用於跨系統大批量數據交互等。針對關係型數據庫,導出的文件內容格式往往是行列格式,有的會加上文件頭,文件尾,對文件內容完整性要求較高的,會有額外的校驗文件,針對文件數量較多的,對文件名還會有特定要求,等等,太多通用場景,這裏不再贅文。

因此,導出文件模塊需支持以下功能:

  • 文件生成路徑、導出數據口徑可配置;
  • 文件名、文件頭、行記錄、文件尾可自定義;
  • 文件名後綴可配置,主要針對文件壓縮方式;
  • 支持多線程導出;
  • 記錄導出文件情況,以供查詢;
  • 對於配套的校驗文件同樣支持以上幾點功能;
  • 導出功能服務化。

該功能主要面向數據,就從數據角度來描述導出流程:


  1. 將需要導成文件的完整數據統一打個標誌(例如標誌值1),像數據庫是ORACLE之類的,可使用分區特性,將標誌值1作爲一個分區;
  2. 單個文件總有大小限制,所以把數據拆分多個文件,每次開始寫一個文件,就把對應數據打上另外一個標誌(例如標誌值2),同樣可以使用分區特性,將標誌值2作爲另一個分區;
  3. 數據庫的讀取緩存也是有大小限制的,如果單個文件過大,就需要分多次讀取數據來寫文件,每讀取一小段數據,則打上第三種標誌(例如標誌值3);
  4. 最後將已寫入文件的數據再改一次標誌(例如標誌值4),也就是說,從剛開始的分區(標誌值1),到文件完全生成完畢,數據的標誌將全部變爲4。

這裏對幾點關鍵思路做下說明:

  • 從流程上來說,基本上是採用化整爲零的做法,目的是降低應用、數據庫的資源佔用。因此,導出數據的口徑,需要先有分區、分文件、分片的修改動作,然後是讀取分片數據動作,最後是歸還分片的動作;
  • 文件格式方面,主要是要素,例如文件名需體現文件序號,text.001,text.002,text.003……這些要素,目前是需要侵入式的、貫穿整個流程來進行記錄,一有改動,會牽扯到主要邏輯,但好處是,所有文件類型都可共享要素;
  • 多線程模式,主要是單個文件佔用一個線程,併發地讀數據寫文件,這點小弟偷懶,沒有實現;
  • 至於服務化,目前唯獨數據口徑沒有完全參數化,其他配置可通過接口傳入;

完整工程,詳見https://github.com/Monicazxz/FileCreate

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章