這段時間,一直在利用hadoop和pig對一些數據進行操作,每周的新產生的數據量都是百萬級以上,對於大批量的數據(千萬級以上)插入和更新操作,如果利用insert的操作起來速度比較慢,我測試了一下如果利用insert 來實現插入三千萬條的記錄需要二十個小時以上(沒有使用集群)。
為了提高插入和更新數據的速度,mysql提供了load指令,可以大大的提高插入的速度,在我的機器上,load操作的速度是insert的10倍左右。
官方的load 指令格式如下:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE tbl_name [CHARACTER SET charset_name] [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ] [IGNORE number LINES] [(col_name_or_user_var,...)] [SET col_name = expr,...]1. 如果你要插入的數據在本地,可以使用如下指令:
Load data local infile '要插入的數據源名稱' into table 要插入的的表名
2. 如果對已經存在的記錄進行更新操作,可以使用如下指令:
Load data local infile '要插入的數據源名稱' replace into table 要插入的的表名
對於有些場景,當每條數據進行更新時需要把相關的時間進行更新,如果沒有進行更新則保存原來的時間。對於這種情況有兩種方法可以進行解決:
方法1. 這種方法比較常規,就是在進行插入或者更新時,把當前的時間傳入到數據庫中,一起進行更新操作。
方法2. 可以在進行建表的時候,通過使用如下指令,假如你要創建的列名為time
`time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,