我制作了一个原始的PHP脚本,只是为了测试查询我的数据库的性能。
这只是在所有集合的所有文档中构建一个循环。
<?php
$m = new Mongo("mongodb://user:pass@serer:27017/db");
$db = $m->dbname;
$users = $db->users->find(); <=== 300k docs, 1 index
$machines = $db->machines->find(); <=== 350k docs, 1 index
$chars = $db->characters->find(); <=== 10k docs, 2 indexes
$stats = $db->stats->find(); <=== 10k docs, 1 index
$allinfos = array();
foreach ($users as $k => $v) { array_push($allinfos, array('item'=>1)); }
foreach ($machines as $k => $v){ array_push($allinfos, array('item'=>1)); }
foreach ($chars as $k => $v) { array_push($allinfos, array('item'=>1)); }
foreach ($stats as $k => $v) { array_push($allinfos, array('item'=>1)); }
print count($allinfos);
?>
在我的本地Apache中,脚本花了2分钟完成处理,但是有效。
在此过程中:
我做的调整:在php.ini中将memory_limit更改为 1048M 。
-
答案 0 :(得分:2)
这是一个如此广泛的问题,除了询问你的瓶颈在哪里之外,很难知道从哪里开始?您可以像这样描述您的脚本:
<?php
$start = microtime(true);
$m = new Mongo("mongodb://user:pass@serer:27017/db");
$db = $m->dbname;
echo (microtime(true) - $start).' : Connected to server<br><br>';
$start = microtime(true);
$users = $db->users->find(); // <=== 300k docs, 1 index
echo (microtime(true) - $start).' : Users query ('.count($users).')<br><br>';
$start = microtime(true);
$machines = $db->machines->find(); // <=== 350k docs, 1 index
echo (microtime(true) - $start).' : Machines query ('.count($machines).')<br><br>';
$start = microtime(true);
$chars = $db->characters->find(); // <=== 10k docs, 2 indexes
echo (microtime(true) - $start).' : Chars query ('.count($chars).')<br><br>';
$start = microtime(true);
$stats = $db->stats->find(); // <=== 10k docs, 1 index
echo (microtime(true) - $start).' : Stats query ('.count($stats).')<br><br>';
?>