php读写上亿记录数据库测试

在Intel Core2 Quad Q6600处理器和4GB内存的环境下,对哈希型数据库和Table数据库进行PHP读写测试。哈希型数据库写入500万到2000万条记录的时间在309至1289秒之间,读取时间稳定在490-770毫秒。Table数据库写入10万至200万条记录的时间在20至293秒,读取速度受返回信息量影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

硬件: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");
?>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值