Sie können Ihre Einfügeoperationen mithilfe der Bulk Operations API nutzen, die ab MongoDB 2.6 und höher verfügbar ist. Die aktuellen PHP-Treiber sollten diese Methoden unterstützen, wo insbesondere müssen Sie die MongoWriteBatch
Klasse für Einfügeoperationen, insbesondere einen Insert-Write Batch mit der Klasse MongoInsertBatch
erstellen:
<?php
$mc = new MongoClient("localhost");
$collection = $mc->selectCollection("test", "category");
$batch = new MongoInsertBatch($collection);
$counter = 0;
for($i=0; $i<1000000; $i++) {
$document = array(
"title" => "MongoDB".$i,
"description" => "database",
"likes" => 100,
"url" => "http://www.tutorialspoint.com/mongodb/",
"by", "tutorials point"
);
$batch->add($document);
$counter++;
if ($counter % 1000 === 0) {
$ret = $batch->execute(array("w" => 1));
$counter++;
$batch = new MongoInsertBatch($collection);
}
}
if ($counter > 0) {
$ret = $batch->execute(array("w" => 1));
}
?>
Im obigen jedes Dokument erstellt in der for-Schleife wird zu einer Einfügeoperation hinzugefügt, die dann über die Methode .add()
zu einem Stapel hinzugefügt wird und nur beim Aufruf von an den Server gesendet wird. Geordnete Schreiboperationen werden in der angegebenen Reihenfolge zur seriellen Ausführung an den Server gesendet. Wenn ein Schreibvorgang fehlschlägt, werden alle verbleibenden Vorgänge abgebrochen.
Es gibt einige Verwaltung der "Größe" dieser Operationen implementiert mit der Modulo-Operation, die in der Regel vom Treiber behandelt werden sollte, aber dies in überschaubaren Größen hält, sollten Sie das Schreibergebnis überprüfen möchten.
Der Schlüssel hier ist, dass, anstatt auf die Schreibantwort vom Server für jedes einzelne Update zu warten, die Operationen gesendet und in "Batches" beantwortet werden. Die Verringerung des "Overheads" bei der Durchführung von Massenaktualisierungen ist beträchtlich, da bei der Kommunikation mit dem Server weniger "Hin und Her" vorhanden ist.
Wie lange ist 'so viel Zeit' und was glaubst/erwartest du' so schnell' zu sein? –
ich erwarte es kann es in 2 Minuten tun –
Wie lange dauert es, und wo hast du die Erwartung, dass es in 2 Minuten tun könnte? Und glauben Sie wirklich, dass ein einziger PHP-Thread 1000000 Einfügungen in 2 Minuten verarbeiten kann? Haben Sie eine Geschäftsanforderung, 1000000 Einfügungen in einer einzigen Anfrage zu bearbeiten? Haben Sie versucht, 1000 Threads mit jeweils 1000 Einträgen auszuführen? –