2015-03-31 72 views
0

我很抱歉如果這個問題是重複的,但我發現的大多數都是關於InnoDB的,而且我正在使用MyISAM。LOAD INFILE 2億加記錄速度

我試圖創建一個進程,將加載200-300萬記錄到表中的任何地方。我正在使用LOAD DATA INFILE,對於一個擁有1.78億條記錄的文件,大約需要30分鐘來加載數據。任何人都可以提出任何方法來加速這個?或者這是相當期望的表現?我試過在加載之前關閉了密鑰,但這似乎並沒有真正創造任何明顯的速度提升。我可以嘗試其他什麼設置?

我在一個有24個相當現代的核心的Linux服務器上。有什麼方法可以利用這一事實?

我會補充一點,我試圖加載3000萬條記錄,耗時5分鐘,這似乎與1.78億條記錄的性能基本相同。但是,如果我嘗試將3000萬條記錄加載到已有3000萬條記錄的表中,則時間需要8分鐘。我可以做任何事情,因爲我相信這種情況也會發生很多次。

任何幫助表示讚賞,但請知道,我相當數據庫無知,所以示例或文檔的鏈接將是非常有益的。

+0

看看這個博客的一些技巧:http://derwiki.tumblr.com/post/24490758395/loading-half-a-billion-rows-into-mysql首先,你應該做一些研究,但是,什麼是瓶頸?磁盤?中央處理器?網絡? – Wolph 2015-03-31 19:38:11

回答

1

這在某種程度上取決於給定記錄的寬度,但聽起來在30分鐘內有1.78億條記錄對我來說已經是相當不錯的速度了。我在25分鐘內完成了4600萬條記錄,並且非常開心,但是在我的案例中,對於每條記錄還有一些處理正在進行。

幾乎總是有方法來提高性能,但成本效益有時會讓人望而卻步。如果您要獲取的文件比每隔30分鐘更頻繁一次,那麼很明顯可能需要其他東西。但是,在這種情況下,我認爲可能需要重新考慮更大的系統以及您存儲的內容/爲什麼要存儲它。

至於將3000萬條記錄加載到空表與非空表之間的差異,對於索引表而言,這並非意外。

+0

是的,我認爲這可能是相當不錯的表現,但只是想我會看看是否有辦法讓它更快。 – cardician 2015-03-31 19:47:51