真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

php寫大文件大數(shù)據(jù) php處理大數(shù)據(jù)量數(shù)據(jù)的思路

php處理大文件文件

我前幾天有一個(gè)面試,面試題就是有這樣一道題。先把自己的思路說一下,因?yàn)樾畔⒘糠浅5拇?,所以我采用了分表,分?4張表,每個(gè)小時(shí)一張,雖然凌晨時(shí)刻的表可能很少數(shù)據(jù),但這樣sum字段的問題就容易解決了,我理解的sum字段是一個(gè)小時(shí)同一個(gè)用戶在相同的環(huán)境的登陸次數(shù)。這樣理解不知對(duì)否,請(qǐng)網(wǎng)友自行甄辨。然后我通過PHP中的fgets函數(shù)一行一行的數(shù)據(jù)取出,入表。實(shí)驗(yàn)了幾萬條數(shù)據(jù)是沒有問題的,但是上億條數(shù)據(jù)可能夠嗆。這一點(diǎn)也請(qǐng)網(wǎng)友注意,我也是新手。只是看到這里沒有答案,給大家一個(gè)參考。廢話不多,看流程:

商州網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)自2013年創(chuàng)立以來到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。

日志文件(access.log)格式:

200?/alipeng.gif?zoneid=2bannerid=44clentid=6materialid=64redirect=http%3a%2f%2f;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%3a%2f%2f;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');//主機(jī)名

define(USER,'root');//數(shù)據(jù)庫賬號(hào)

define(PASS,'111111');//數(shù)據(jù)庫密碼

define(DBNAME,'test');//所用的數(shù)據(jù)庫

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('連接數(shù)據(jù)庫失敗');

//程序中自動(dòng)建庫和建表,這樣一定程度上拖慢了程序的速度

//創(chuàng)建數(shù)據(jù)庫

$crdb="create?database?if?not?exists?".DBNAME;

if(!mysql_query($crdb)){

die('創(chuàng)建數(shù)據(jù)庫失敗');

}

//鏈接數(shù)據(jù)庫

mysql_select_db(DBNAME)?or?die('選擇數(shù)據(jù)庫失敗');

mysql_set_charset(CHARSET);

//因?yàn)閿?shù)據(jù)量很大我將數(shù)據(jù)按小時(shí)分表,分成24個(gè)表,每小時(shí)一個(gè)表,這樣num字段的值也好做統(tǒng)計(jì)

//數(shù)據(jù)循環(huán)建表

for($i=0;$i24;$i++){

if($i10){

$tbhz='0'.$i;//如果前10張表,表后綴應(yīng)該是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("打開文件失敗");

//對(duì)文件內(nèi)容進(jìn)行循環(huán),直到文件末尾才停止

while?(!feof($file)){

//每次讀取一行

$line?=?fgets($file,1024);

//狀態(tài)是200的進(jìn)行寫入數(shù)據(jù)庫操作

if(preg_match('/^200/',$line)){

$pinfo=parse_url($line);//url信息

$ext=$pinfo['query'];//取得傳遞的各個(gè)參數(shù)

$parray=explode('',$ext);//根據(jù)分解為數(shù)組

//因?yàn)榉纸鉃閿?shù)組后并不是要的值,所以要對(duì)值進(jìn)行一次截取,將等號(hào)及等號(hào)左邊的都去掉

foreach($parray?as?$val){

$narray[]=ltrim(strstr($val,'='),'=');

}

$narray[8]=rtrim($narray[8],'_');

//截取時(shí)間的秒數(shù)

$getmun=substr($parray[5],5,10);

$time=date('Y-m-d?H',$getmun);//將秒數(shù)轉(zhuǎn)化為時(shí)間類型。

//得到表后綴

$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);//執(zhí)行插入

if(!$res?||?!mysql_affected_rows()0){

die('寫入數(shù)據(jù)庫失敗');

}

unset($narray);//循環(huán)一次將narray銷毀,為下一次循環(huán)做準(zhǔn)備

//var_dump(parse_url($line)['query']);

}

}

fclose($file);//關(guān)閉

//因?yàn)閟um字段還是0,下面代碼段需要處理sum字段的值

//24張表循環(huán)處理

for($i=0;$i24;$i++){

if($i10){

$tbhz='0'.$i;//如果前10張表,表后綴應(yīng)該是00-09

}else{

$tbhz=$i;

}

//該sql語句是把同一個(gè)小時(shí)內(nèi),并且符合條件相等的登陸的總次數(shù)和需要的登陸信息查出,為下面修改sum做準(zhǔn)備

$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";

//發(fā)送查詢sql

$res=mysql_query($sql);

if($res??mysql_num_rows($res)0){

while($row=mysql_fetch_assoc($res)){

//修改sum字段,即同一小時(shí)內(nèi)的登陸次數(shù)

$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']}'";

//發(fā)送修改sql,執(zhí)行修改sum

$upres=mysql_query($upsql);

if(!$upres){

die('修改登陸sum失敗');

}

}

}

}

echo?'數(shù)據(jù)成功入表';

使用說明:

將配置文件cfg.php中的連接數(shù)據(jù)庫賬號(hào)、密碼修改為自己本機(jī)的(默認(rèn)新增的庫名是test)

直接運(yùn)行test1.php

PHP怎么實(shí)現(xiàn)超大文件上傳

修改php中的配置文件:

在php.ini里面查看如下行:

upload_max_filesize = 8M

post_max_size = 10M

memory_limit = 20M

PHP-大數(shù)據(jù)量怎么處理優(yōu)化

大數(shù)據(jù)的話可以進(jìn)行以下操作:

減少對(duì)數(shù)據(jù)庫的讀取,也就是減少調(diào)用數(shù)據(jù)庫,

進(jìn)行數(shù)據(jù)緩存,

利用數(shù)據(jù)庫的自身優(yōu)化技術(shù),如索引等

精確查詢條件,有利于提高查找速度

如何用php導(dǎo)出導(dǎo)入大數(shù)據(jù)庫

在使用PhpMyAdmin的時(shí)候經(jīng)常用到數(shù)據(jù)的導(dǎo)入和導(dǎo)出(Export/Import),但是在導(dǎo)入大數(shù)據(jù)的時(shí)候由于php上傳文件的限制和腳本響應(yīng)時(shí)間的限制,導(dǎo)致phpMyAdmin無法導(dǎo)入大數(shù)據(jù)。很多時(shí)候都是由于文件過大,從本地瀏覽上傳導(dǎo)入,容易中斷失敗,有沒有更好的方法呢?

方法:

在phpMyAdmin的目錄下,找到根目錄的config.inc.php文件,

打開config.inc.php文件,查找$cfg['UploadDir'],這個(gè)參數(shù)就是設(shè)定導(dǎo)入文件存放的目錄,這里把值設(shè)定為:ImportSQLFile。

在phpMyAdmin目錄下,建立以ImportSQLFile命名的文件夾,

把我們需要導(dǎo)入的數(shù)據(jù)文件,放到ImportSQLFile文件夾下面,非常簡(jiǎn)單,

登入phpMyAdmin,選擇需要導(dǎo)入的數(shù)據(jù),點(diǎn)擊導(dǎo)航條上面的“導(dǎo)入”按鈕,

選中“從網(wǎng)站服務(wù)器上傳文件夾ImportSQLFile/中選擇:”選項(xiàng),并需要導(dǎo)入的數(shù)據(jù)文件,

最后點(diǎn)擊“執(zhí)行”,即可導(dǎo)入成功。

注意事項(xiàng)

如果在config.inc.php文件,沒有找到$cfg['UploadDir'],可以自己在文件中添加上去即可。


網(wǎng)頁名稱:php寫大文件大數(shù)據(jù) php處理大數(shù)據(jù)量數(shù)據(jù)的思路
本文鏈接:http://weahome.cn/article/ddddigp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部