2009-11-20 72 views
8

我想通過以下命令上傳95 GB CSV文件轉換爲MySQL數據庫(MySQL的5.1.36):通過加載數據infile將CSV文件上傳到MyISAM表中:CSV引擎是一種替代方案嗎?

CREATE TABLE MOD13Q1 (
rid INT UNSIGNED NOT NULL AUTO_INCREMENT, 
gid MEDIUMINT(6) UNSIGNED NOT NULL , 
yr SMALLINT(4) UNSIGNED NOT NULL , 
dyyr SMALLINT(4) UNSIGNED NOT NULL , 
ndvi DECIMAL(7,4) NOT NULL comment 'NA value is 9', 
reliability TINYINT(4) NOT NULL comment 'NA value is 9', 
ndviquality1 TINYINT(1) NOT NULL , 
ndviquality2 TINYINT(1) NOT NULL , 
primary key (rid), 
key(gid) 
) ENGINE = MyISAM ; 

LOAD DATA INFILE 'datafile.csv' INTO TABLE MOD13Q1 FIELDS TERMINATED by ',' LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES 
(gid, yr, dyyr, ndvi, reliability, 
ndviquality1, ndviquality2 
) ; 

我此刻通過DOS運行此腳本,但數據庫沒有迴應。它適用於較小的CSV文件(1.5 GB)。它會對這個文件大小起作用嗎?

你有什麼建議如何更有效/更快地做到這一點?引擎= CSV會成爲一種替代方案(索引未激活! - >所以查詢可能運行速度超慢?)。

更新

感謝您的提示,它的工作!

mysql> LOAD DATA INFILE 'E:\\AAJan\\data\\data.csv' INTO TABL 
E MOD13Q1 
    -> FIELDS TERMINATED by ',' 
    ->  LINES TERMINATED BY '\r\n' 
    ->  IGNORE 1 LINES 
    ->  (gid, yr, dyyr, ndvi, reliability, 
    ->  ndviquality1, ndviquality2 
    -> ) ; 
Query OK, -1923241485 rows affected (18 hours 28 min 51.26 sec) 
Records: -1923241485 Deleted: 0 Skipped: 0 Warnings: 0 

mysql> 

希望這有助於其他人避免將數據分成大塊。

+0

@標誌:東京內閣是關鍵/值DBM所以沒有什麼可做恕我直言 – RageZ 2009-11-20 07:56:58

回答

1

您應該在導入時禁用所有約束。除此之外,我認爲它應該正常工作,並且需要指出的是,這需要一段時間,可能需要幾個小時。

3

沒有簡單的方法,你將不得不拆分成塊的數據,然後導入這些...

0

bcp的? .................................. 哦,等一下。無論如何這都不重要,這將是一些批量交易。你需要大塊。您需要它來避免過多填寫日誌段空間。鎖計數限制。任何超過一百萬件事情的時間太多了。所以BCP最知名的批量大小是10,000條記錄!

0

我同意RageZ和Sarfraz的答案,但我有一些補充。

1.增加數據庫緩存並重新配置一些mysql選項可能會有所幫助(RAM使用情況)。

看看這個:

Mysql Database Performance tuning

我想你應該專注於write_bufferread_bufferquery_cache_size以及其他RAM和I/O相關的選項。

2.您可能需要更快的存儲設備。你現在在用什麼?

對於像這樣的數據庫 - 你應該使用RAID-5陣列和快速和現代的硬盤。

也許你的配置對日常任務來說足夠了,但是備份和孤島危機情況呢?

創建像這樣大的備份和恢復數據庫將花費太多時間在機器上,需要18個小時才能完成簡單的插入操作。

我知道95GB是真正的大文本文件,但是......我認爲您應該使用能夠在最長2-3小時內完成這種簡單操作的硬件。

0

您可以嘗試使用MySQLTuner - 用perl編寫的高性能MySQL調優腳本,它可以幫助您配置MySQL配置,併爲提高性能和穩定性提供建議。

相關問題