大資料量生成指令碼及匯入策略

2022-09-24 01:03:07 字數 1326 閱讀 4328

大資料量生成指令碼及匯入策略

效能測試過程中,如果需要構造一張表大資料量基礎資料時,有兩點需要注意:如何生成unl檔案(此檔案是字尾為.unl的資料檔案,格式為,按表列分割的資料記錄,例如:10001|33333|),生成的unl檔案是否可以一次性匯入到資料庫相應表中。

為了方便敘述,假設資料庫存在表test(id integer,name integer,primary key(id,name))。若想為此表匯入1000w條記錄,手動insert不現實,一般資料庫系統都會提供特定指令,實現資料的匯入匯出操作,我們可以預先構造好相應格式的unl檔案,再呼叫資料庫匯入指令,實現資料的快速匯入。以informix資料庫為例,資料匯入操作的命令為:load from testdata.unl insert into test;現在,剩下的問題就是如何生成一千萬行的unl檔案了。

了解shell指令碼的同學會很快想到使用awk實現,這裡也如大家所想,使用awk實現:

[plain]

#!/bin/sh  

awk 'begin  

printf "%d completed.\n",i  

}  }' /dev/null  

這樣,會生成乙個有1000w條記錄的unl檔案,於是我們興沖沖使用「load from testdata.unl insert into test;」指令匯入資料,結果發現報錯了。因為一次性匯入的資料太多,資料庫系統的快取、日誌系統空間不夠用,無法一次性記錄太多的記錄(或者因為操作時間太長,直接超時了「long transaction aborted」)。

有兩種解決方案:提高快取、日誌系統大小;縮小單個unl資料量。顯而易見,後者更為合理。

如果將一千萬的unl分成100小份,每份10w條,就好處理多了。指令碼略作修改,如下:

[plain]

#!/bin/sh  

awk 'begin  

printf "%d completed.\n",i  

}  }' /dev/null  

此時,面對100個檔案,要操作一百次,又有點頭大。本著偷懶的原則,自然想到使用自動去做。於是,自動匯入到test表中的shell指令碼也新鮮出爐:

[plain]

#!/bin/sh  

#生成100條的sql指令碼  

awk 'begin  

printf "completed."  

}' /dev/null  

#執行指令碼  

dbaccess mydatabank loaddata.sql     

當然,如果想更深一步「偷懶」,可以把這些shell放一起,不過要注意可讀性,建議再新建乙個shell,順序呼叫這兩個shell,便於後續維護。

sqlldr 匯入大資料量資料

最近在處理一些資料,資料量比較大的資料,記錄下使用方法和過程,以備日後檢視 如果使用insert插入超過1000條時間就有點長了 5 6分鐘 使用plsql的text import 匯入8萬條耐心等一會也可以忍受,但是我們要處理的是500萬條資料,嘗試了幾種方法,最後選擇了sqlldr 首先會有乙個...

imp匯入大資料量檔案

在使用exp imp將資料轉移時,由於現場的資料可能是海量,在使用exp匯出的時候,exp會匯出建表語句和表的內容,建表中有乙個引數initial,這個引數表示表的初始化的大小,預設是64k,而exp時,會根據表的大小動態的改變這個值,那麼在匯入的時候,會先建立這個表,而假如是海量資料,那麼建立表就...

航測大資料量處理 大資料量處理及優化措施

1 首先考慮垂直拆分庫,不同的表拆分到不同的庫中,例如使用者庫 產品庫 支付庫 2 然後考慮水平拆分庫,將乙個表的資料放到多張表中,例如按照使用者 時間 訂單號 3 插入資料的時候不建立索引 4 待資料已經插入完成後,建立索引 5 正確的指定索引字段 6 使用批量插入資料庫的方式代替單條資料的插入 ...