我有一個產品名稱列表在txt文件中。但是,該文件是巨大的(4,8GB ++),所以是的,這是很多的話。隨着產品名稱,我想添加一些額外的信息,如md5散列,時間和隨機ID。將產品名稱獲取到數據庫中
這樣做最好的解決方案是什麼?逐行創建一個PHP腳本逐行閱讀似乎需要永遠。
任何建議嗎?
我有一個產品名稱列表在txt文件中。但是,該文件是巨大的(4,8GB ++),所以是的,這是很多的話。隨着產品名稱,我想添加一些額外的信息,如md5散列,時間和隨機ID。將產品名稱獲取到數據庫中
這樣做最好的解決方案是什麼?逐行創建一個PHP腳本逐行閱讀似乎需要永遠。
任何建議嗎?
是的,你可以使用PHP來讀取一個文本文件,並把它傳遞到數據庫
$string = file_get_contents("YOURTEXTFILE", "r");
$myFile = "PATH/TO/YOUR/TEXTFILE";
$fh = fopen($myFile, 'w') or die("Could not open: " . mysql_error());
fwrite($fh, $string);
fclose($fh);
$sql = mysql_connect("localhost", "root", "password");
if (!$sql) {
die("Could not connect: " . mysql_error());
}
mysql_select_db("YOURDB");
$result = mysql_query("LOAD DATA INFILE '$myFile'" .
" INTO TABLE test FIELDS TERMINATED BY '|'");
if (!$result) {
die("Could not load. " . mysql_error());
}
,結果會是這樣
+--------+-------------+------------+
| ID | Name | time |
+--------+-------------+------------+
| 145 | line1 | 23:59 |
| 234 | line2 | 00:00 |
+--------+-------------+------------+
那麼如果我想散列這個詞,以及一個ID呢?創建一個uniq散列 – 2013-03-16 21:33:37
.... ['mysql_error()'](http://php.net/manual/en/function.mysql-error.php)if false === ['fopen'](http ://php.net/manual/en/function.fopen.php)? – 2013-03-16 21:50:15
我已經把更多地考慮到你的問題,我以前使用過這個解決方案,但我不確定它是否適合你,因爲你的文件的大小。現在我將把它留在這裏以防萬一它對別人有用。
假設你product.txt文件只有productIDs,沒有別的,你可以:NEWLINE的
基本不變
PID1
PID2
到
(PID1),
(PID2),
,然後用一些簡單的編輯使文件讀取
INSERT INTO dTable(ColName) VALUES
(PID1),
(PID2);
最後導入
mysql -uUser -p DATABASE < filename.sql
這是一個基本的方法,但沒有太多的麻煩應該工作。之後添加剩餘的數據將在SQL中更簡單。
如果您使用的是mysql並且該文件是CSV類型,那麼您可以使用LOAD DATA INFILE
。
如果你有一個格式良好的CSV,你根本不需要PHP。
讓我知道如果是這樣的話,我可以添加更多的細節。
不確定您是否打算將隨機ID用於產品代碼,但是如果您是因爲您可能會發生衝突而受傷。 – James 2013-03-16 21:18:51
慢慢來。 4 GB的文件需要花費大量的時間在**逐行**上進行迭代。 – hjpotter92 2013-03-16 21:20:18
我將使用隨機代碼,以及日期,時間信息等,所以不應該有崩潰。我也可以用單詞的長度或散列來組合它。 – 2013-03-16 21:20:36