La clase MongoWriteBatch
(PECL mongo >=1.5.0)
Introducción
MongoWriteBatch es la clase base para las clases MongoInsertBatch, MongoUpdateBatch y MongoDeleteBatch.
MongoWriteBatch permite crear lotes de varias operaciones (del mismo tipo) y enviarlos a MongoDB a la vez. Esto puede ser especialmente útil al operar sobre muchos documentos al mismo tiempo para reducir los viajes de ida y vuelta.
Antes de la versión 1.5.0 del controlador, era posible utilizar MongoCollection::batchInsert(), sin embargo, a partir de la versión 1.5.0 no se recomientda dicho método.
Nota: Esta clase solamente está disponible al conversar con servidores de MongoDB 2.6.0 (y posteriores). Se lanzará una MongoProtocolException si se intenta usarla con versiones de MongoDB más antiguas.
Sinopsis de la Clase
$collection
[, string $batch_type
[, array $write_options
]] )MongoWriteBatch types
MongoWriteBatch::COMMAND_INSERT-
Crear un lote de escritura de inserciones
MongoWriteBatch::COMMAND_UPDATE-
Crear un lote de escritura de actualizaciones
MongoWriteBatch::COMMAND_DELETE-
Crear un lote de escritura de eliminaciones
Descripción
Al ejecutar un lote, invocando a MongoWriteBatch::execute(), MongoWriteBatch enviará » maxWriteBatchSize (predeterminado a 1000) documentos o hasta » maxBsonObjectSize (predeterminado a 16777216 bytes), lo que ocurra primero.
Nota:
Los documentos nunca se transferirán parcialmente. Si se añade al lote un documento que sobrepase el límte, se creará un nuevo lote donde se colocará dicho documento.
Errores/Excepciones
- Exception en fallos de análisis de parámetros
- Exception en errores de validación de argumentos (p.ej., claves ausentes)
- MongoProtocolException cuando se conversa con servidores de MongoDB más antiguos que 2.6.0.
- MongoProtocolException en errores de socket.
- MongoWriteConcernException cuando falla una escritura debido a WriteConcerns
Ejemplos
Ejemplo #1 Ejemplo de MongoWriteBatch
Añadir documentos a un lote de Insert y ejecutarlo
<?php
$mc = new MongoClient("localhost");
$colección = $mc->selectCollection("prueba", "prueba");
$docs = array();
$docs[] = array("my" => "demo");
$docs[] = array("is" => "working");
$docs[] = array("pretty" => "well");
$lote = new MongoInsertBatch($colección);
foreach($docs as $documento) {
$lote->add($documento);
}
$retval = $lote->execute(array("w" => 1));
var_dump($retval);
?>
El resultado del ejemplo sería:
array(2) {
["nInserted"]=>
int(3)
["ok"]=>
bool(true)
}
Tabla de contenidos
- MongoWriteBatch::add — Añade una operación de escritura a un lote
- MongoWriteBatch::__construct — Crea un nuevo lote de operaciones de escritura
- MongoWriteBatch::execute — Ejecuta un lote de operaciones de escritura