我设置了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
我正在使用Windows 7,WAMP,MongoDB 2.0.7和Windows PHP Mongo驱动程序(v1.1.12)from Github。
回答评论中的问题:
问:您是否测试了系统上的其他PHP代码及其持续时间?
答:这实际上是一个较大的Web应用程序的一小部分,其他一切正常。我很乐意发布你认为有用的任何基准测试。
问:您是否在Mongo中分析了查询?
A:是的。如果我通过shell运行它,它会立即得到响应。
问:这是什么WAMP版本?
A: WampServer 2.2
问:这是什么PHP版本?
A: 5.3.13
问:mongodb已经有数据吗?
答:我在发布的基准测试之前删除了所有数据库,所以它所包含的全部内容都是下面代码插入的数据。
问:计算机的规格是什么(主要是内存)?
A: AMD Phenom II X4 840T 2.9GHz处理器,4GB DDR3内存,64位操作系统
答案 0 :(得分:2)
我同意15秒是荒谬的。即使SafeMode
打开,教程代码也应该接近0.5秒(如果是)。您可以通过插入代码看到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代码不会等待从DB返回,因此理论上对DB的调用不应该是代码中的问题。
find()
可能会导致问题,所以我会对此进行分析。
驱动程序仍有可能造成某种减速但这种可能性极小。为了进一步帮助我们:
答案 1 :(得分:0)
插入 new 数据库需要一段时间,因为MongoDB需要先预先分配数据库文件。后续插入将很快。 除此之外:使用一个插入执行基准测试是没有意义的。