天天看點

關于Execl導入大資料量檔案的處理思路(實戰經驗)

關于Execl導入大資料量檔案的處理思路(實戰經驗)

Execl作為微軟的早期産品,功能強大的同時,性能也相應的差很多,處理大資料量時

尤其明顯。最近項目中有一個需求,要求導入人員資訊,Execl的資料量大概5000左右,

但是會關聯其他表,查詢出100萬級别的資料量,插入到值表。并且這個過程是系統管理

人員每月不定期在頁面導入的。系統設計的要求是10秒内完成。

簡單說一下我們的思路,這裡主要說思路,更細節的技術問題,可以和我聯系:

第一步:把Excel轉成CSV檔案,這裡可以是系統使用人員手動轉換,也可以由程式來轉換。

然後先導入Excel中的5000條資訊到人員資訊表。背景資料庫用存儲過程實作,使用merge的

方式進行增量導入。

第二步:關聯其他表,然後将符合條件的結果集作為值直接插入到臨時表,這個過程也是在

存儲過程中實作。這裡有一個技巧,把SELECT的結果集,作為INSERT語句的VALUES,這樣

能比逐條處理速度要快很多。

第三步:使用MERGE的方式,将臨時表的資料,增量導入目标表。這個過程也在存儲過程中

實作。

以上的案例,資料校驗的邏輯不是很多,隻有一個重複性校驗,是以使用的是MERGE方式。

如果業務上的資料校驗邏輯比較複雜,可能性能就會降低很多,這時就要考慮其他解決

方案。

上面的SQL關鍵代碼,基本上都放在了存儲過程中,之是以這樣做,就是為了提高性能。

在進行大資料量的操作時,每減少一次資料庫互動,可能就會明顯提高性能。我們都知道,

存儲過程存儲在資料庫伺服器端,屬于已經預編譯過的SQL,當調用存儲過程時,隻需要

傳遞參數,而不需要再重新編譯SQL。并且,把多個SQL放在一個存儲過程中,減少了應用

伺服器與資料庫伺服器的互動次數。

關于上面的案例,還有2點要說明。

1,在處理大資料量的檔案時,盡量減少逐行掃描的方式,,而是采用批量LOAD/IMPORT,

或者批量MERGE/INSERT的方式。

2,建适當數量的索引,無論對于INSERT操作,還是MERGE操作,都會起到事半功倍的效果。

最近項目中在進行性能優化,關于Execl的導入導出,以及大資料量的查詢,都研究了好長

時間,之前的查詢慢、導入慢,導出慢的問題,基本上都解決了,性能提高了不少,後面

有時間會慢慢和大家分享。