bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

PHP上億數據 php大量數據處理

php處理大文件文件

我前幾天有一個面試,面試題就是有這樣一道題。先把自己的思路說一下,因為信息量非常的大,所以我采用了分表,分成24張表,每個小時一張,雖然凌晨時刻的表可能很少數據,但這樣sum字段的問題就容易解決了,我理解的sum字段是一個小時同一個用戶在相同的環境的登陸次數。這樣理解不知對否,請網友自行甄辨。然后我通過PHP中的fgets函數一行一行的數據取出,入表。實驗了幾萬條數據是沒有問題的,但是上億條數據可能夠嗆。這一點也請網友注意,我也是新手。只是看到這里沒有答案,給大家一個參考。廢話不多,看流程:

網站建設哪家好,找成都創新互聯公司!專注于網頁設計、網站建設、微信開發、重慶小程序開發、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了鐘樓免費建站歡迎大家使用!

日志文件(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');//主機名

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($res??mysql_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

php+mysql可以處理億級的數據嗎

理論上是可以的,但效率上就有問題了,這么大量的數據一般不會放一張表里面,都會考慮分表,然后考慮索引、數據庫主從、服務器配置等,提高查詢效率php+mysql可以處理億級的數據嗎

1億條數據如何分表100張到Mysql數據庫中(PHP)

下面通過創建100張表來演示下1億條數據的分表過程,具體請看下文代碼。

當數據量猛增的時候,大家都會選擇庫表散列等等方式去優化數據讀寫速度。筆者做了一個簡單的嘗試,1億條數據,分100張表。具體實現過程如下:

首先創建100張表:

$i=0;

while($i=99){

echo

"$newNumber

\r\n";

$sql="CREATE

TABLE

`code_".$i."`

(

`full_code`

char(10)

NOT

NULL,

`create_time`

int(10)

unsigned

NOT

NULL,

PRIMARY

KEY

(`full_code`),

)

ENGINE=MyISAM

DEFAULT

CHARSET=utf8";

mysql_query($sql);

$i++;

下面說一下我的分表規則,full_code作為主鍵,我們對full_code做hash

函數如下:

$table_name=get_hash_table('code',$full_code);

function

get_hash_table($table,$code,$s=100){

$hash

=

sprintf("%u",

crc32($code));

echo

$hash;

$hash1

=

intval(fmod($hash,

$s));

return

$table."_".$hash1;

}

這樣插入數據前通過get_hash_table獲取數據存放的表名。

最后我們使用merge存儲引擎來實現一張完整的code表

CREATE

TABLE

IF

NOT

EXISTS

`code`

(

`full_code`

char(10)

NOT

NULL,

`create_time`

int(10)

unsigned

NOT

NULL,

INDEX(full_code)

)

TYPE=MERGE

UNION=(code_0,code_1,code_2.......)

INSERT_METHOD=LAST

;

這樣我們通過select

*

from

code就可以得到所有的full_code數據了。

以上介紹就是本文的全部內容,希望對大家有所幫助。

名稱欄目:PHP上億數據 php大量數據處理
本文URL:http://vcdvsql.cn/article32/hpjdsc.html

成都網站建設公司_創新互聯,為您提供品牌網站制作響應式網站網站制作網站策劃靜態網站電子商務

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站網頁設計