我們在開發系統經常運用到資料庫,但遇到大量的資料要寫進資料庫時,要是寫入IO次數過多,會導致系統效率過低,因此如何有效率寫入資料庫的方法應該說演算法該如何設計,這可是一種藝術,我以前在解析硬碟裡所有資料起碼都五十萬筆以上起跳,尤其是Win10以上系統將近百萬甚至百萬多,在解析NTFS的資料時曾經遇過一個狀況,NTFS的檔案路徑資訊取得是要向上找父目錄,一層一層向上找直到根目錄,才完整組合出路徑資訊,那時候就遇到寫入資料庫效率低的問題,必須花很長時間甚至半小時以上才完成,雖然我在解析該磁區所有檔案第一階段做法是累積幾萬筆資料後再一次寫入,但接下來遇到的第二問題就是最棘手的路徑組合問題,假設這裡有五十萬筆資料,每筆路徑都一一 Select 這五十萬筆內容去組出路徑,可想而知那效率會非常非常的差,因此我想了又想去尋找這龐大資料的規律,想到了一個提升效率的方法,就是利用兩個 Table ,第一個 Table 記錄這五十萬筆資料的資訊內容,但把路徑欄位空下來,然後我在記憶體裡做組合路徑動作,當然要把第一 Table 一些資訊存在記憶體才有辦法組合,第二個 Table 就紀錄組合好的路徑以及判斷是否該筆資料欄位資訊,利用資料庫 JOIN 的語法特性,將第二個 Table 的路徑併到第一個 Table 空白路徑欄位,完成後 Drop 第二 Table ,最後再利用 VACUUM 語法清空 DB 檔案不必要的空間,我測試資料寫入資料庫完成時間縮短到只需五至七分鐘,效率大幅提升,解決了該問題非常有成就感,所以最後我想分享給大家是,當我們遇到資料過於龐大效率低下時,可以思考看看問題點可能出在哪裡,創造出自己的演算法來解決問題提升效能,這是非常讓人開心的事,以上是我以前開發系統時所遇到經驗。

pexels-panumas-nikhomkhai-1148820.jpg

文章標籤

RexLin 發表在 痞客邦 留言(0) 人氣()