1

我设置了 Mongo,一切都很好。当我使用 MongoVUE 或 shell 时,一切都快如闪电。

但是,在为 Windows 安装 PHP Mongo 驱动程序之后,每个查询都需要 15 秒以上的时间。即使是这个来自 PHP.net 的简单教程也需要 15 秒。

教程示例:

    $time_start = microtime(true);
    // connect
    $m = new Mongo();

    // select a database
    $db = $m->comedy;

    // select a collection (analogous to a relational database's table)
    $collection = $db->cartoons;

    // add a record
    $obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
    $collection->insert($obj);

    // add another record, with a different "shape"
    $obj = array( "title" => "XKCD", "online" => true );
    $collection->insert($obj);

    // find everything in the collection
    $cursor = $collection->find();

    // iterate through the results
    foreach ($cursor as $obj) {
        echo $obj["title"] . "\n";
    }
    $time_end = microtime(true);
    $time = $time_end - $time_start;

    echo "\nOperation took $time seconds\n";

输出:

Calvin and Hobbes XKCD Operation took 15.000731945038 seconds

我正在使用来自 Github的 Windows 7、WAMP、MongoDB 2.0.7 和 Windows PHP Mongo 驱动程序 (v1.1.12) 。

回答评论中的问题:

问:您是否在您的系统上测试过其他 PHP 代码及其持续时间?
答:这实际上是一个更大的 Web 应用程序的一小部分,其他一切正常。我很乐意发布你们认为有用的任何基准。

问:您是否在 Mongo 中分析过查询?
答:是的。如果我通过 shell 运行它,它会立即得到响应。

问:这是什么 WAMP 版本?
答: WampServer 2.2

问:这是什么 PHP 版本?
答: 5.3.13

Q:mongodb里面已经有数据了吗?
答: 我在发布基准测试之前删除了所有数据库,所以它所包含的只是下面代码插入的数据。

问:电脑的规格是什么(主要是内存)?
A: AMD Phenom II X4 840T 2.9GHz 处理器,4GB DDR3 RAM,64 位操作系统

4

2 回答 2

2

我同意 15 秒是荒谬的。即使打开,教程代码也应该运行接近 0.5 秒(如果有的话)SafeMode。如插入代码所示,您已SafeMode关闭:

// add a record
$obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
$collection->insert($obj);

// add another record, with a different "shape"
$obj = array( "title" => "XKCD", "online" => true );
$collection->insert($obj);

您正在执行异步插入,这意味着 PHP 代码不会等待从数据库返回,因此理论上对数据库的调用不应该是代码中的问题。

不过,这find()可能会导致问题,所以我会对此进行分析。

驱动程序仍然有可能导致某种减速,但这极不可能。为了进一步帮助我们:

  • 您是否在您的系统上测试过其他 PHP 代码及其持续时间?
  • 您是否在 Mongo 中分析了查询?
  • 这是什么 WAMP 版本?
  • 这是什么PHP版本?
  • mongod 已经在其中获取数据了吗?
  • 电脑的规格是什么(主要是内存)?
于 2012-08-28T14:27:19.460 回答
1

插入数据库需要一段时间,因为 MongoDB 需要先预分配数据库文件。随后的插入将很快。除此之外:仅使用一个插入执行基准测试是没有意义的。

于 2012-08-28T14:05:45.433 回答