Heim  >  Artikel  >  Backend-Entwicklung  >  Welche Lösung sollte beim Erstellen einer Webseite zum Importieren von CSV-Daten verwendet werden oder welche Probleme sollten berücksichtigt werden, wenn Dutzende oder Millionen von Daten vorliegen?

Welche Lösung sollte beim Erstellen einer Webseite zum Importieren von CSV-Daten verwendet werden oder welche Probleme sollten berücksichtigt werden, wenn Dutzende oder Millionen von Daten vorliegen?

WBOY
WBOYOriginal
2016-12-05 13:44:201441Durchsuche

Ich möchte PHP verwenden, um eine Webseite wie den Titel zu erstellen. Ich habe vorher einen einfachen Upload durchgeführt, aber jetzt muss ich ihn verarbeiten Millionen von Datenimporten. Ich kenne Python, aber Python ist zu umständlich und ich habe vor, PHP zu verwenden. Bitte geben Sie mir einen Rat~

Antwortinhalt:

Ich möchte PHP verwenden, um eine Webseite wie den Titel zu erstellen. Ich habe vorher einen einfachen Upload durchgeführt, aber jetzt muss ich ihn verarbeiten Millionen von Datenimporten. Ich kenne Python, aber Python ist zu umständlich und ich habe vor, PHP zu verwenden. Bitte geben Sie mir einen Rat~

Wenn es ein Effizienzproblem ist. Das Zusammenfügen in eine Zeichenfolge ähnelt dem Einfügen in...value(), value(), z. B. dem Einfügen einer >transaction>>-Schleife. Beachten Sie, dass beim gleichzeitigen Einfügen einer großen Datenmenge die Konfiguration der maximal zulässigen Datenmenge geändert werden muss, die gleichzeitig in MySQL oder andere Datenbanken eingefügt werden darf. Ich habe es gerade versucht. Es dauert etwa 4 Sekunden, 100.000 Elemente gleichzeitig einzufügen (für eine Tabelle mit 5 Feldern)

Die Datenmenge ist relativ groß und kann stapelweise importiert werden, um die Upload-Schnittstelle wiederholt anzufordern, wobei in jeder Anfrage unterschiedliche Parameter übergeben werden
www.xxx.com/upload.php?offset=0&length=1000

www.xxx.com/upload.php?offset=1000&length=1000

Dadurch wird verhindert, dass das PHP-Skript eine Zeitüberschreitung erfährt.

Es gibt große Anforderungen an die Optimierung der Einfügeanweisung und der Tabellenstruktur, sonst wird die Methode zum Zusammenführen von Daten + Transaktion + geordneten Daten effizienter

Laden Sie zuerst die CSV-Tabelle auf den Server hoch.

Dann importiert PHP die CSV-Tabelle in die MySQL-Datenbank:


<code><?php
//开启事务,批量插入
$db = new mysqli('127.0.0.1','user','pass','dbname',3306);
$db->query('SET AUTOCOMMIT=0');
$db->query('START TRANSACTION');

//导入CSV表格:CSV转数组
$fp = fopen('file.csv', 'r');
while ( ($row = fgetcsv($fp)) !== FALSE ) {
    //从文件指针中读入一行并解析CSV
    $stmt = $db->prepare('INSERT INTO posts (id, post_title, post_content) VALUES (?,?,?)');
    $stmt->bind_param('iss', $row[0], $row[1], $row[2]); //这里假设每行内容分别为ID,标题和内容
    $stmt->execute();
    //如果插入失败,改为更新
    if($stmt->affected_rows == 0) {
        $stmt = $db->prepare('UPDATE posts SET post_title = ?, post_content = ? WHERE id = ?');
        $stmt->bind_param('ssi', $row[1], $row[2], $row[0]);
        $stmt->execute();
        if($stmt->affected_rows == 0) {
            echo 'Import '.$row[0].' failed!'."\n";
        }
    }
}
fclose($fp);

//提交事务
$db->query('COMMIT'); //失败的操作已经echo输出来了,不需要回滚ROLLBACK
$db->query('SET AUTOCOMMIT=1');</code>
Asynchron, Sie können Millionen von Synchronisierungen nicht ertragen

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn