我想知道Mongo默认如何写入磁盘。异步还是同步?
当我这样做时:
$collection->insert(array("a" => 42));
同步吗?文档说默认情况下,参数w
设置为1
,这会导致insert
在数据写入磁盘时仅返回 。与w => 0
(未确认)相反,其中数据实际上是以异步方式写入的(火与遗忘)。
所以我的问题是
insert
仅在同步模式(MongoCursorException
)时抛出w => 1
,我是对的吗?答案 0 :(得分:3)
您的假设是正确的。
因为无论如何我都在编写mondodb单元测试,所以我把它放在一起进行测试。
public function testWriteConcern()
{
$mongo = new MongoClient("mongodb://localhost/");
$db = $mongo->test;
$collection = $db->test;
$collection->remove();
$collection->insert(array("_id"=>"unique"));
try {
$collection->insert(array("_id"=>"unique"));
$this->fail("Expected duplicate key exception (w=1)");
}
catch (MongoCursorException $e) {}
try {
$collection->insert(array("_id"=>"unique"), array("w" => 0));
$this->fail("Expected duplicate key exception (w=0)");
}
catch (MongoCursorException $e) {}
$db->drop();
$mongo->close();
}
如您所料,当写入关注点设置为0时,不会抛出MongoCursorException。
There was 1 failure:
1) MongoDBTest::testWriteConcern
Expected duplicate key exception (w=0)
FAILURES!
Tests: 1, Assertions: 0, Failures: 1.