硬件:Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz 4G内存
1、哈希型数据库
第一次写:500万条记录 309秒
第二次写:500万条记录 321秒
第三次写:500万条记录 309秒
第四次写:500万条记录 314秒
第五次写:1000万条记录 601秒
第六次写:1000万条记录 635秒
第七次写:2000万条记录 1289秒
第八次写:4000万条记录 php发生错误无返回信息 但数据都有写到数据库
500 万条记录里 循环1万次查找: 没找到记录时共约490~540毫秒 找到一条记录时共约740~770毫秒
1000万条记录里 循环1万次查找: 没找到记录时共约520~550毫秒 找到一条记录时共约740~770毫秒
1500万条记录里 循环1万次查找: 没找到记录时共约490~550毫秒 找到一条记录时共约630~700毫秒
2000万条记录里 循环1万次查找: 没找到记录时共约490~550毫秒 找到一条记录时共约650~750毫秒
3000万条记录里 循环1万次查找: 没找到记录时共约490~550毫秒 找到一条记录时共约650~750毫秒
4000万条记录里 循环1万次查找: 没找到记录时共约470~550毫秒 找到一条记录时共约650~750毫秒
6000万条记录里 循环1万次查找: 没找到记录时共约470~550毫秒 找到一条记录时共约500~600毫秒
1亿条记录里 循环1万次查找: 没找到记录时共约480~550毫秒 找到一条记录时共约650~750毫秒
官方的测试数据时100万条读0.6秒,写0.7秒。我的测试包含网络存取开销,另外我的服务器还运行其他程序速度比较不稳定。
代码
写:
<?php
set_time_limit(86400);
require_once("inc/comm.inc.php");
function getmicrotime()
{
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$objTest=ClsTt::getTt("DB");
$time_start = getmicrotime(); //获取程序开始执行的时间
for($i=0;$i<40000000;$i++)
{
$key="h".$i;
$value="h".$i;
$objTest->put($key,$value);
}
$time_end = getmicrotime();
printf ("[页面执行时间: %.2f毫秒]/n/n",($time_end - $time_start)*1000);
ClsTt::delTt("DB");
?>
读:
<?php
set_time_limit(86400);
require_once("inc/comm.inc.php");
function getmicrotime()
{
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$objTest=ClsTt::getTt("DB");
$time_start = getmicrotime(); //获取程序开始执行的时间
for($i=39990000;$i<40000000;$i++)
{
$out=$objTest->get("h".$i);
}
echo $out;
$time_end = getmicrotime();
printf ("[页面执行时间: %.2f毫秒]/n/n",($time_end - $time_start)*1000);
ClsTt::delTt("DB");
?>
2、Table数据库
表结构
name sex age memo1 memo2 memo3 memo4 memo5 memo6 memo7 memo8 memo9 memo10 memo11 memo12 memo13
对age字段做索引
第一次写:10万条记录 20秒
第二次写:40万条记录 140秒
第三次写:20万条记录 293秒
写数据,当记录数增大的时候,写入的数据变慢
读:1000次 没找到:大概120毫秒 找到一条:大概190毫秒 10万条记录
读:1000次 没找到:大概120毫秒 找到一条:大概190毫秒 50万条记录
读:1000次 没找到:大概120毫秒 找到一条:大概190毫秒 70万条记录
记录数的增加,对查找速度没影响。如果有返回信息则影响速度。返回的信息越多速度越慢。
测试程序:
写:
<?php
set_time_limit(86400);
require_once("inc/comm.inc.php");
function getmicrotime()
{
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
function getName()
{
$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
$len = strlen($str);
$password = "";
for($i=1;$i<=8;$i++){
$num=rand(0,$len-1);
$password = $password.$str[$num];
}
return $password;
}
$objTest=ClsTt::getTt("DB");
$time_start = getmicrotime(); //获取程序开始执行的时间
for($i=0;$i<200000;$i++)
{
$key=getName();
$arrCols=array('name'=>$key,
'sex'=>rand(0,1),
'age'=>rand(18,60),
'memo'=>'memo',
'memo2'=>'memo2',
'memo3'=>'memo3',
'memo4'=>'memo4',
'memo5'=>'memo5',
'memo6'=>'memo6',
'memo7'=>'memo7',
'memo8'=>'memo8',
'memo9'=>'memo9',
'memo10'=>'memo10',
'memo11'=>'memo11',
'memo12'=>'memo12',
'memo13'=>'memo13'
);
$objTest->put($key,$arrCols);
}
//$objTest->setindex("age",Tyrant_RDBTable::ITDECIMAL);
$time_end = getmicrotime();
printf ("[页面执行时间: %.2f毫秒]/n/n",($time_end - $time_start)*1000);
ClsTt::delTt("DB");
?>
读:
<?php
set_time_limit(86400);
require_once("inc/comm.inc.php");
$objUser=ClsTt::getTt("DB");
$time_start = getmicrotime(); //获取程序开始执行的时间
for($i=0;$i<1000;$i++)
{
$objQry=new Query();
$objQry->eq("age",62);
$out=$objUser->searchGet($objQry);
}
$time_end = getmicrotime();
printf ("[页面执行时间: %.2f毫秒]/n/n",($time_end - $time_start)*1000);
ClsTt::delTt("login");
?>