Mongo PHP写操作是同步还是异步?

时间:2013-11-06 13:44:09

标签: php mongodb

我想知道Mongo默认如何写入磁盘。异步还是同步?

当我这样做时:

$collection->insert(array("a" => 42));

同步吗?文档说默认情况下,参数w设置为1,这会导致insert在数据写入磁盘时仅返回 。与w => 0(未确认)相反,其中数据实际上是以异步方式写入的(火与遗忘)。

所以我的问题是

  1. 有人能证实我上面的观察结果吗?
  2. 在我看来,insert仅在同步模式(MongoCursorException)时抛出w => 1,我是对的吗?

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.