2009-05-29 98 views
0

我從數組中解析了數以千計的數據。我的關注點是我的腳本的處理時間,它是否會影響我的腳本的處理時間,因爲我有十萬條記錄被插入到數據庫中?我有一種方法可以批量處理數據到數據庫的插入嗎?使用PHP批量處理數組使用PHP

回答

0

這是SQL文件 - 但是你可以按照它的模式(如果不只是用它) -

它的文件分割成可以指定零件,說3000行,然後將它們插入一個定時間隔< 1秒到1分鐘或更多。

這樣一個大文件被破碎成較小的插入件等

這將有助於旁路編輯PHP服務器配置和擔心內存限制等。如腳本的​​執行時間等。

新用戶無法插入鏈接,以便谷歌搜索「SQL自卸大」或者,如果這個工程轉到: WWW [點]奧澤羅夫[點]去[斜槓] bigdump [點] PHP

,所以你可以即使在理論上修改上述腳本以接受您的數組作爲數據源而不是SQl文件。這顯然需要一些修改。

希望它有幫助。 -R

+0

感謝大家的建議!我真的很感激它,我會嘗試使代碼與大轉儲相同的概念或只是修改它.. 再次感謝! – text 2009-05-29 15:05:03

0

它不太可能會影響處理時間,但您需要確保數據庫的事務日誌足夠大,以便爲100k行構建回滾段。

1

語法是:

INSERT INTO tablename (fld1, fld2) VALUES (val1, val2), (val3, val4)... ; 

所以,你可以寫不便。像這樣的(虛擬的例子):

foreach ($data AS $key=>$value) 
{ 
    $data[$key] = "($value[0], $value[1])"; 
} 
$query = "INSERT INTO tablename (fld1, fld2) VALUES ".implode(',', $data); 

這個工程上巨大的數據集相當快的事件,而不用擔心性能,如果你的數據集裝入內存。

0

或者與ADOdb中包裝(http://adodb.sourceforge.net/):

// assuming you have your data in a form like this: 
$params = array(
      array("key1","val1"), 
      array("key2","val2"), 
      array("key3","val3"), 
      // etc... 
     ); 
// you can do this: 
$sql = "INSERT INTO `tablename` (`key`,`val`) VALUES (?, ?)"; 
$db->Execute($sql, $params);