最近因為業務需求,我們需要將我們的訂單表(一千三百萬資料,並且每天已五萬條速度增加)已訂單型別分組遷移到新的業務表中,以降低我們訂單表的大小,同時暫時杜絕訂單表所帶來的資料瓶頸問題,需求下來了,基本思路也要確定下來,我打算先將三天前的歷史資料先跑到表裡,待整個業務線遷移過後,我再將剩下的資料跑進去,思路確立了,我就轟轟烈烈的幹了起來。
首先我理所當然的想用**實現,我就吭哧吭哧的用go寫了是個協程同時跑資料,用gorm v2的findinbatches可以批量插入資料,sql為insert into ***(字段) values (資料1,資料2)這樣,中間遇到乙個問題,我想可以快點結束,就用了分頁查詢,每次5000條,每個物件包含四十個字段,結果就報錯prepared statement contains too many placeholders,佔位符太多,mysql一條語句最多支援65535,然後我就修改為1500條每次,剛開始確實很快,但是越到後面就發現分頁查詢到幾秒、幾十秒最後基本跑不下去了,這種方案分頁查詢太慢,pass。
接著我就直接在sql裡面跑,用insert into ***(欄位1,欄位2…) form select 條件,以前我跑百萬資料的時候就用的這個語句,需要注意的是,select 查詢的時候一定記得要給查詢條件加上索引,避免全表掃瞄。因為全表掃瞄會導致資料加鎖,資料量太多會讓資料讀寫均無法操作,切記,一定要加索引,這種方案可以正常匯入,但是時間比較長,有全表加鎖的風險,慎用。
再然後我使用的是阿里雲的資料湖分析工具(dla,功能強大,強烈推薦),將我們的歷史資料先導下來,然後使用load data快速匯入資料的方法去匯入資料,這個方法有個弊端就是需要將資料(檔案較大)上傳到伺服器,並且需要是宿主機上,但是速度真的是很快,我選擇的是這種方式匯入資料,方便快捷。
以上幾種方式,小資料量的遷移可以選擇**(只要為了鍛鍊寫**能力)或者insert into select from,中資料量的可以使用mysqldump去遷移資料,大資料量還是推薦使用load data快速匯入的方式去遷移資料。
MySQL兩千萬資料優化 遷移
最近有一張2000w條記錄的資料表需要優化和遷移。2000w資料對於mysql來說很尷尬,因為合理的建立索引速度還是挺快的,再怎麼優化速度也得不到多大提公升。不過這些資料有大量的冗餘欄位和錯誤資訊,極不方便做統計和分析。所以我需要建立一張新錶,把舊表中的資料一條一條取出來優化後放回新表 一.清除冗餘...
MySQL兩千萬資料優化 遷移
最近有一張2000w條記錄的資料表需要優化和遷移。2000w資料對於mysql來說很尷尬,因為合理的建立索引速度還是挺快的,再怎麼優化速度也得不到多大提公升。不過這些資料有大量的冗餘欄位和錯誤資訊,極不方便做統計和分析。所以我需要建立一張新錶,把舊表中的資料一條一條取出來優化後放回新表 2000w資...
mysql資料遷移到Oracle的正確方法
在mysql資料庫裡有乙個表student,它的結構如下 在oracle資料庫裡有乙個表from mysql,它的結構如下 現在要把資料從mysql的student轉移到oracle的from mysql中去,這裡筆iftyx者借助kettle的spoon工具,可以快速的實現這個功能。首先,開啟sp...