【发布时间】:2015-01-20 02:47:50
【问题描述】:
我有两个系列。第一个,$bluescan,有 345 个文档和一些 ['company'] 值丢失。第二个,$maclistResults,有 20285 个文档。
我正在对 $maclistResults 运行 $bluescan 以填充缺失的 ['company'] 值。
我使用以下 PHP 代码为 $maclistResults 创建了三个索引:
$db->$jsonCollectionName->ensureIndex(array('mac' => 1));
$db->$jsonCollectionName->ensureIndex(array('company' => 1));
$db->$jsonCollectionName->ensureIndex(array('mac'=>1, 'company'=>1));
我正在为数据库使用 MongoLab 免费帐户并在本地运行我的 PHP 应用程序。
下面的代码演示了这个过程。它可以工作,可以满足我的需要,但执行任务需要将近 64 秒。
我能做些什么来改善这个执行时间吗?
代码:
else
{
$maclist = 'maclist';
$time_start = microtime(true);
foreach ($bluescan as $key => $value)
{
$maclistResults = $db->$maclist->find(array('mac'=>substr($value['mac'], 0, 8)), array('mac'=>1, 'company'=>1));
foreach ($maclistResults as $value2)
{
if (empty($value['company']))
{
$bluescan[$key]['company'] = $value2['company'];
}
}
}
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "<pre>";
echo "maclistResults execution time: ".$time." seconds";
echo "</pre>";
$time 的回显输出:
maclistResults execution time: 63.7298750877 seconds
附加信息:PHP 版本 5.6.2(OSX Yosemite 上的 MAMP PRO)
【问题讨论】:
-
除非我弄错了,否则您在
foreach循环中执行的每个find操作都会导致对服务器的调用,这意味着对服务器的 345 次调用,以及您在 @987654326 上执行的任何操作@ 之前。只是网络开销可能会影响程序的性能...只需查看这些find调用的各个执行时间。
标签: php performance mongodb mlab