Класс MongoWriteBatch
(PECL mongo >=1.5.0)
Введение
MongoWriteBatch является базовым классом для классов MongoInsertBatch, MongoUpdateBatch и MongoDeleteBatch.
MongoWriteBatch позволяет "собирать в пакет" несколько операций (одного типа) и отправлять их все в MongoDB одновременно. Это может быть особенно полезно при одновременной работе со многими документами, чтобы уменьшить количество обращений.
До версии 1.5.0 драйвера было возможно использовать MongoCollection::batchInsert(), однако, начиная с 1.5.0, этот метод не рекомендуется использовать.
Примечание: Этот класс доступен только при общении с серверами MongoDB 2.6.0 (и выше). Он будет выдавать исключение MongoProtocolException при попытке использовать его на старых серверах MongoDB.
Обзор классов
$collection
, string $batch_type
= ?
, array $write_options
= ?
)Типы MongoWriteBatch
MongoWriteBatch::COMMAND_INSERT
-
Создает пакет записи и вставки
MongoWriteBatch::COMMAND_UPDATE
-
Создает пакет обновления записи
MongoWriteBatch::COMMAND_DELETE
-
Создает пакет удаления записи
Описание
При выполнении пакета с помощью вызова
MongoWriteBatch::execute(), MongoWriteBatch будет отправлять
до maxWriteBatchSize
(по умолчанию 1000)
или maxBsonObjectSize
(по умолчанию 16777216 байт),
в зависимости от того, что произойдет первым.
Замечание:
Документы никогда не будут переданы частично. При добавлении документов в пакет, превышающий лимит, создается новый пакет и документ будет помещен в него.
Ошибки
- Exception, при ошибках разбора параметров
- Exception, при ошибках проверки аргументов (например, отсутствующие ключи)
- MongoProtocolException, при обращении к серверу MongoDB старше 2.6.0.
- MongoProtocolException, при ошибках сокетов.
- MongoWriteConcernException, когда запись не удалась из-за WriteConcerns
Примеры
Пример #1 Пример MongoWriteBatch
Добавление документов в пакет и последующее его выполнение:
<?php
$mc = new MongoClient("localhost");
$collection = $mc->selectCollection("test", "test");
$docs = array();
$docs[] = array("my" => "demo");
$docs[] = array("is" => "working");
$docs[] = array("pretty" => "well");
$batch = new MongoInsertBatch($collection);
foreach($docs as $document) {
$batch->add($document);
}
$retval = $batch->execute(array("w" => 1));
var_dump($retval);
?>
Результат выполнения данного примера:
array(2) { ["nInserted"]=> int(3) ["ok"]=> bool(true) }
Содержание
- MongoWriteBatch::add — Добавляет операцию записи в пакет
- MongoWriteBatch::__construct — Создает новый пакет операций записи
- MongoWriteBatch::execute — Выполняет пакет операций записи