测试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写入比读取要更快。
 
 
 
 

0 个评论

要回复文章请先登录注册