PHP32亿数据 php占比

php处理大文件文件PHP32亿数据我前几天有一个面试PHP32亿数据,面试题就是有这样一道题 。先把自己的思路说一下,因为信息量非常的大,所以PHP32亿数据我采用了分表 , 分成24张表,每个小时一张,虽然凌晨时刻的表可能很少数据 , 但这样sum字段的问题就容易解决了,我理解的sum字段是一个小时同一个用户在相同的环境的登陆次数 。这样理解不知对否,请网友自行甄辨 。然后我通过PHP中的fgets函数一行一行的数据取出,入表 。实验了几万条数据是没有问题的 , 但是上亿条数据可能够呛 。这一点也请网友注意,我也是新手 。只是看到这里没有答案,给大家一个参考 。废话不多,看流程:
日志文件(access.log)格式:
200 /alipeng.gif?zoneid=2bannerid=44clentid=6materialid=64redirect=http://;time=1384444800.832ip=127.0.0.1user_agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.48 Safari/537.36utrace=a6dbdd2f6a37b946165b7ae98dcd4f79
502 /alipeng.gif?zoneid=2bannerid=44clentid=6materialid=64redirect=http://;time=1384444800.904ip=127.0.0.1user_agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.48 Safari/537.36utrace=a6dbdd2f6a37b946165b7ae98dcd4f79
配置文件cfg.php:
define(HOST,'localhost');//主机名
define(USER,'root');//数据库账号
define(PASS,'111111');//数据库密码
define(DBNAME,'test');//所用的数据库
define(CHARSET,'utf8');//使用的字符集
具体代码test.php:
?php
header("content-type:text/html;charset=utf-8");
require './cfg.php';
$link = mysql_connect(HOST,USER,PASS) or die('连接数据库失败');
//程序中自动建库和建表 , 这样一定程度上拖慢了程序的速度
//创建数据库
$crdb="create database if not exists ".DBNAME;
if(!mysql_query($crdb)){
die('创建数据库失败');
}
//链接数据库
mysql_select_db(DBNAME) or die('选择数据库失败');
mysql_set_charset(CHARSET);
//因为数据量很大我将数据按小时分表 , 分成24个表,每小时一个表 , 这样num字段的值也好做统计
//数据循环建表
for($i=0;$i24;$i){
if($i10){
$tbhz='0'.$i;//如果前10张表,表后缀应该是00-09
}else{
$tbhz=$i;
}
$ctbsql="create table if not exists logininfo_{$tbhz}(
id int not null auto_increment primary key,
zoneid int not null default 0,
bannerid int not null default 0,
clentid int not null default 0,
materialid int not null default 0,
redirect char(200) not null default '',
time char(16) not null default '',
user_agent char(200) not null default '',
utrace char(32) not null default '',
sum int not null default 0
)TYPE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci";
mysql_query($ctbsql);
}
//打开文件
$file=fopen("./access.log",'r') or die("打开文件失败");
//对文件内容进行循环,直到文件末尾才停止
while (!feof($file)){
//每次读取一行
$line = fgets($file,1024);
//状态是200的进行写入数据库操作
if(preg_match('/^200/',$line)){
$pinfo=parse_url($line);//url信息
$ext=$pinfo['query'];//取得传递的各个参数
$parray=explode('',$ext);//根据分解为数组
//因为分解为数组后并不是要的值 , 所以要对值进行一次截取,将等号及等号左边的都去掉
foreach($parray as $val){
$narray[]=ltrim(strstr($val,'='),'=');
}
$narray[8]=rtrim($narray[8],'_');
//截取时间的秒数
$getmun=substr($parray[5],5,10);
$time=date('Y-m-d H',$getmun);//将秒数转化为时间类型 。
//得到表后缀
$tbhz=date('H',$getmun);
$sql="insert into logininfo_{$tbhz} values(null,'{$narray[0]}','{$narray[1]}','{$narray[2]}','{$narray[3]}','{$narray[4]}','{$time}','{$narray[7]}','{$narray[8]}',0)";
//echo $sql;
$res=mysql_query($sql);//执行插入
if(!$res || !mysql_affected_rows()0){
die('写入数据库失败');
}
unset($narray);//循环一次将narray销毁 , 为下一次循环做准备
//var_dump(parse_url($line)['query']);
}
}
fclose($file);//关闭
//因为sum字段还是0 , 下面代码段需要处理sum字段的值
//24张表循环处理
for($i=0;$i24;$i){
if($i10){
$tbhz='0'.$i;//如果前10张表,表后缀应该是00-09
}else{
$tbhz=$i;
}
//该sql语句是把同一个小时内,并且符合条件相等的登陆的总次数和需要的登陆信息查出,为下面修改sum做准备
$sql="SELECT COUNT('zoneid') AS sum,zoneid,bannerid,clentid,materialid,redirect,user_agent,utrace FROM logininfo_{$tbhz} GROUP BY zoneid,bannerid,clentid,materialid,redirect,user_agent,utrace";
//发送查询sql
$res=mysql_query($sql);
if($resmysql_num_rows($res)0){
while($row=mysql_fetch_assoc($res)){
//修改sum字段,即同一小时内的登陆次数
$upsql="update logininfo_{$tbhz} set sum='{$row['sum']}' where zoneid='{$row['zoneid']}' and bannerid='{$row['bannerid']}' and clentid='{$row['clentid']}' and materialid='{$row['materialid']}' and redirect='{$row['redirect']}' and user_agent='{$row['user_agent']}' and utrace='{$row['utrace']}'";
//发送修改sql,执行修改sum
$upres=mysql_query($upsql);
if(!$upres){
die('修改登陆sum失败');
}
}
}
}
echo '数据成功入表';
使用说明:
将配置文件cfg.php中的连接数据库账号、密码修改为自己本机的(默认新增的库名是test)
直接运行test1.php
phpcms数据量较大怎么办呢?过几十万级了,每次生成都很累,官方有什么解决不?回复 5# freshcn 一般资讯站点 , 新闻量肯定大,动不动都是万级以上的,所以,而且经常改动页面某一部分,这就涉及到重新生成的问题了如果还是用传统的HTML , 那这个速度 。。。是吧,肯定不行的,所以,希望官方是否在AJAX,XML以及SHTML方面考虑一下呢毕竟现在的网站哪个不采集 , 一采集就是上万万的,生成很耗时间的
php怎么导出大量数据的ExcelPHP从数据库分多次读取100万行记录,和分多次将100万行写入文本文件都没问题
Excel可以支持100万行记录,Excel 2003最大支持65536行,从2007版开始支持104万行了,目前2007PHP32亿数据的盗版应该比较普及了-_-! 问清楚你PHP32亿数据的客户是什么版本 。
你要导出excelPHP32亿数据的理由是非常充分和正确的 , 应该继续坚持 。业务人员最熟悉的就是Excel , 实在不熟悉现学现用也比别的快 。只是要注意,当数据量达到10万行这个级别时,Excel的公式填充将会非常非常慢,如果再有LOOKUP()公式,基本上十分钟内处理CPU满载进程管理器杀不掉的状态,这时候其实xamppphpmyadmin是一个易用性和性能都最平衡的选择
PHPExcel输出的是Excel XML格式,有个XML头和尾,中间是数据Body,需要将100万行都赋值给一个数组才可以调用PHPExcel-write() , 这容易导致PHP执行超时或者内存超限,你不妨调整一下php.ini配置,把超时时间和内存限制都改到很大
如果是输出csv格式,那就太简单了,你的问题可能是没给字段内容加引号 , 加上引号再调用fputcsv试试?其实fputcsv做的事情特别简单,你甚至可以不管它 , 自己把CSV文件的每一行拼接好了之后用file_put_contents写入如果你对php有兴趣的话,可以向我一样在后盾人平台多看看自己学习学习 , 时间长了自己就慢慢明白了,希望能帮到你,给个采纳吧(?ω?)hiahiahia 谢谢
在php中 ,int 如果是一个有符号数,最大值整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号) 。PHP 不支持无符号整数 。Integer值的字长可以用常量PHP_INT_SIZE来表示,自 PHP 4.4.0 和 PHP 5.0.5后,最大值可以用常量PHP_INT_MAX来表示 。
请阅读PHP手册、语言参考、数据类型一章 。
PHP 用PHPExcel往数据库导入大量数据1、首先我们准备一个含有数据的Excel表格,表头和数据表中的表字段相对应 。
2、在ThinkPHP中引入PHPExcel类库 。
3、然后我们编写导入的PHP代码 。
4、然后我们编写导出的PHP代码 。
5、然后我们进行导出测试发现可以导出即可 。
php mysql可以处理亿级的数据吗理论上是可以的,但效率上就有问题了,这么大量的数据一般不会放一张表里面,都会考虑分表,然后考虑索引、数据库主从、服务器配置等,提高查询效率php mysql可以处理亿级的数据吗
【PHP32亿数据 php占比】PHP32亿数据的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于php占比、PHP32亿数据的信息别忘了在本站进行查找喔 。

    推荐阅读