簡體   English   中英

我如何將大量內容從多陣列數組存儲到mysql數據庫中?

[英]How can I store a huge amount of content from multidiemsional array into mysql database?

這是我的數組:

array(4) {
  [0]=>
  array(500000) {
    ["1234"]=>
    array(3) {
      ["fileName"]=>
      string(10) "monkey.jpg"
      ["path"]=>
      string(20) "animales/monkey.jpg"
      ["dateTime"]=>
       string(19) "2016-10-12 19:46:25"
    }
    ["3456"]=>
    array(3) {
      ["fileName"]=>
      string(9) "horse.jpg"
      ["path"]=>
      string(19) "animales/horse.jpg"
      ["dateTime"]=>
       string(19) "2016-10-12 19:46:25"
    }
    .... and many more...
  }
 ... and many more...
}

我想將內容存儲到我的數據庫中:

$sql = "INSERT INTO files (id,fileName,path,dateTime) values(?,?,?,?) ";

foreach($array as $key => $value){
    if(is_array($value)){
        foreach($value as $key => $v){
            foreach($v as $k => $item){
                if(is_array($v)){
                    $s = str_replace("\\","",$v['dateTime']);
                    $d = strtotime($s);
                    $dateTime = date('Y.m.d H:i:s', $d);  
                    $q->execute(array($key,$v['fileName'],$v['path'],$dateTime));
                }
            }
        }
    }
}

我的問題是,我有超過500.000條目。 所以我的系統崩潰了。 我認為這是因為循環內有太多循環。 有沒有一種方法可以僅通過一個循環或以其他方式更快地讀取內容?

注意: $array是這樣創建的拼接數組($ array [] = array_splice($ orinal_array,0,count($ original_array));實際上,這樣做是為了使系統更快

請看一下這個答案:

MYSQL使用LOAD DATA INFILE從csv導入數據

您應該將數據轉換為csv並依靠LOAD DATA INFILE

不是您應該將csv文件上傳到mysql服務器以依賴於此Mysql功能

使用序列化json_encode可能是一種方法。 這樣,您就不必遍歷所有元素並處理斜線,因為所有元素都變成了一個字符串,以后可以使用json_decode讀取或反序列化PHP函數。

旁注:請使用有意義的變量名,以便幫助您的人們不必弄清楚您的意思。 即:

foreach($v as $k => $item){

比...差一點

foreach($fileCollection as $fileIterator => $fileDetails){

如果您確實需要遍歷所有數據並將每個文件屬性存儲在單獨的列中,則您需要的只是2x foreach(一個用於收集,一個用於每個文件)。

foreach($globalCollection as $fiveHundredThousandRows){ 
    foreach ($fiveHundredThousandRows as $fileIterator => $fileData){
        $timestamp = strtotime($fileData['dateTime']);
        $q->execute(array($fileIterator,$fileData['fileName'],$fileData['path'],date( 'Y.m.d H:i:s', $timestamp)));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM