我從USDA's網站獲得這個大的(和奇怪格式的txt文件)。這是NUT_DATA.txt文件。將大分隔文件導入到MySQL表
但問題是,它幾乎是27MB!我成功導入了其他一些較小的文件,但我的方法是使用file_get_contents
,這有助於在我試圖阻止27+ MB RAM時拋出錯誤。
那麼如何將這個龐大的文件導入到我的MySQL數據庫中而不會遇到超時和內存問題?我試過每次從文件中獲得一行,但是這會遇到超時問題。
使用PHP 5.2.0。
這裏是舊腳本(DB中的字段都只是數字,因爲我想不出什麼數字表示什麼營養,我發現這個數據非常糟糕的文檔很抱歉的代碼的醜陋。):
<?
$file = "NUT_DATA.txt";
$data = split("\n", file_get_contents($file)); // split each line
$link = mysql_connect("localhost", "username", "password");
mysql_select_db("database", $link);
for($i = 0, $e = sizeof($data); $i < $e; $i++)
{
$sql = "INSERT INTO `USDA` (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17) VALUES(";
$row = split("\^", trim($data[$i])); // split each line by carrot
for ($j = 0, $k = sizeof($row); $j < $k; $j++) {
$val = trim($row[$j], '~');
$val = (empty($val)) ? 0 : $val;
$sql .= ((empty($val)) ? 0 : $val) . ','; // this gets rid of those tildas and replaces empty strings with 0s
}
$sql = rtrim($sql, ',') . ");";
mysql_query($sql) or die(mysql_error()); // query the db
}
echo "Finished inserting data into database.\n";
mysql_close($link);
?>
我不知道PHP ,但我認爲如果你可以讀取幾行文字,那麼它可能會更好,然後將它們一次插入到數據庫中,然後讀取下一行文件直到EOF ... – Sunny 2010-06-13 02:23:37
執行此操作的最佳方法是使用LOA D DATA(參見http://dev.mysql.com/doc/refman/5.1/en/load-data.html)當然這不是PHP,但它也不需要幾個小時來加載它。 – 2010-06-13 02:48:44
感謝大家,但它是共享主機,我沒有完全訪問MySQL,也沒有任何其他腳本語言,除了PHP。 – Tom 2010-06-13 02:54:16