G-framework
一款优秀的国产PHP MVC轻量级开发框架
我的博客
mongoDB性能测试
硬件环境:某网站云服务器
CPU:1核
内存:1G
硬盘:20G

软件环境:
操作系统:CentOS 6.3 64位
web服务器:nginx 1.4.5
php版本:php 5.5.9
mongodb版本:mongodb 2.4.9
mongo客户端:php mongo扩展 1.4.5

执行操作:
查询 (findOne)
写入(insert)
更新(update)

测试执行时间:
执行10次查询+10次写入+10次更新  => 2.8毫秒
执行100次查询+100次写入+100次更新  => 19.5毫秒
执行1000次查询+1000次写入+1000次更新  => 191.6毫秒
执行10000次查询+10000次写入+10000次更新  => 1934.7毫秒
执行100000次查询+100000次写入+100000次更新  => 19473.7毫秒
执行1000000次查询+1000000次写入+1000000次更新  => 用时200913.2毫秒

测试结果:
在上述环境下,php每秒执行5000次mongodb读写更新。测试代码如下:
        set_time_limit(0);
        $statrTime = microtime(true);
        $mongo = new Mongo();
        $db = $mongo->selectDB('mongodb1');
        $blog_id = $db->selectCollection('blog_id');
        $blog = $db->selectCollection('blog');
        $options['_id'] = 1;
        for ($i=1; $i<=1000000; $i++) {
            $blog_id_item = $blog_id->findOne($options);
            $autoid = $blog_id_item['autoid'] + 1;
            $data['_id'] = $autoid;
            $data['title'] = '标题'.$autoid;
            $data['content'] = '第'.$autoid.'篇文章内容';
            $data['ctime'] = time();
            if ($blog->insert($data)) {
                //新增成功,id+1
                $udata['$inc'] = array('autoid'=>1);
                $blog_id->update($options, $udata);
            }
            else {
                echo 'error ..  nothing to do!<br />';
            }
        }
        $mongo->close();
        $endTime = microtime(true);
        $diffTime = round(($endTime - $statrTime) * 1000, 1);
        echo '<br />用时'.$diffTime.'毫秒';

如果遇到超时问题,可以修改nginx和php-fpm配置参数:
nginx.conf 配置参数
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
php-fpm.conf 配置参数
request_terminate_timeout = 300s;

单独读取测试代码:

    public function mongoread () {
        set_time_limit(0);
        $statrTime = microtime(true);
        $mongo = new Mongo();
        $db = $mongo->selectDB('mongodb1');
        $blog = $db->selectCollection('blog');
        for ($i=1; $i<=100000; $i++) {
            $options['_id'] = $i;
            $blog_item = $blog->findOne($options);
        }
        $mongo->close();
        $endTime = microtime(true);
        $diffTime = round(($endTime - $statrTime) * 1000, 1);
        echo '<br />用时'.$diffTime.'毫秒';
    }
测试结果:
读取1000条记录时间 => 用时88.2毫秒
读取10000条记录时间 => 用时857.5毫秒
读取100000条记录时间 => 用时8752.1毫秒 (增加10万条数据后第二次读取用时9138.2毫秒,第三次用时8859.8毫秒)
平均每秒读取11425条记录

单独写入测试代码:
    public function mongowrite () {
        set_time_limit(0);
        $statrTime = microtime(true);
        $mongo = new Mongo();
        $db = $mongo->selectDB('mongodb1');
        $blog = $db->selectCollection('blog2');
        for ($i=1; $i<=10000; $i++) {
            $data['_id'] = $i;
            $data['title'] = '标题'.$i;
            $data['content'] = '第'.$i.'篇文章内容';
            $data['ctime'] = time();
            $blog->insert($data);
        }
        $mongo->close();
        $endTime = microtime(true);
        $diffTime = round(($endTime - $statrTime) * 1000, 1);
        echo '<br />用时'.$diffTime.'毫秒';
    }
测试结果:
写入1000条记录时间 => 用时12.5毫秒
写入10000条记录时间 => 用时234.4毫秒
写入100000条记录时间 => 用时3265.6毫秒 (第二次测试用时3180.9毫秒,第二次平均每秒写入31437条记录)
平均每秒写入30622条记录

通过测试可以看出,mongodb写入比读取要更快。
上一篇:CentOS下配置Mongodb环境及安装php-mongo扩展
下一篇:Linux下数据库自动备份及自动提交到svn