亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何處理百萬條數據寫入到數據庫

如何處理百萬條數據寫入到數據庫

冉冉說 2019-04-09 20:23:19
在一個文本文件里存了一百萬條數據,一行一條,我需要把符合條件的每一行數據寫入到數據庫里,按照以前的做法就是讀取文件里的數據,然后存入數組,然后foreach數組進行一條一條的處理(符合條件的寫入到數據庫),但是面對上百萬條數據,如果我再繼續這樣做看來是自尋死路,可是處理大數據真是大姑娘我坐花轎可是頭一回,一點經驗也沒有,從網上找資料說用php進程/線程來解決,我對進程與線程是一頭污水,請大牛們進來分享一下這方面的經驗,是怎么處理大數據的,如果通過進程/線程又是怎么實現的呢?
查看完整描述

2 回答

?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

按一千萬行的數據來計算,假設你對PHP最熟悉,開發速度最快,假設你要寫入到MySQL中。
用shell將一千萬行文件切分成100個文件,這樣每個文件有10萬行,具體做法可以mansplit。
寫php腳本,腳本內容是讀一個文件,然后輸出有效的數據。注意數據格式,嚴格按照表中字段的順序來寫,字段之間用半角分號隔開,行之間用\n隔開。具體參數可配置,參見MySQL的loaddata命令參數。注意是phpcli方式運行的,不要拿Apache或者其他webserver下面跑這個東西。如果按行讀不知道怎么搞可以直接用php的file()函數,生成的sql語句通過error_log($sql,3,"/path/to/dataa")函數寫入到文件中。同時可以echo一些調試信息,以備后續檢查。
寫shell腳本調用php處理日志.腳本可以類似來寫
/path/to/php/bin/php-fgenMySQLdata.phpsource=logaout=dataa>/errora.log&
/path/to/php/bin/php-fgenMySQLdata.phpsource=logbout=datab>/errorb.log&
/path/to/php/bin/php-fgenMySQLdata.phpsource=logcout=datac>/errorc.log&
....重復一百行,機器配置低可以分批寫,每個寫10行也行。這個腳本內容很有規律吧,本身也可以用php來生成。時間又省了。
在機器上執行這個shell腳本,實際上就啟動多個PHP進程來生成數據。配置夠牛的話,就等于你啟動了100個PHP進程來處理數據。速度又快了。
繼續寫shell腳本,內容是打開MySQL用loaddata來載入數據。
mysql-h127.0.0.1-uUser-ppwd-P3306-Ddbname-e'loaddatainfile"/path/to/dataa"intotableTableName(Field1,Field1,Field1);'
其中的field1...要跟生成數據的順序對應,這個命令可以直接執行,也可以放到shell里面重復寫N行,然后執行shell腳本。
PS:注意編碼
                            
查看完整回答
反對 回復 2019-04-09
  • 2 回答
  • 0 關注
  • 1141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號