linux統(tǒng)計(jì)ip訪問(wèn)次數(shù) 海量數(shù)據(jù)算法:如何從超過(guò)10G的記錄IP地址的日志中,較快的找出登錄次數(shù)最多的一個(gè)IP?
海量數(shù)據(jù)算法:如何從超過(guò)10G的記錄IP地址的日志中,較快的找出登錄次數(shù)最多的一個(gè)IP?答案太復(fù)雜了。如果仔細(xì)計(jì)算,IP地址是4字節(jié),最多是4G。打開(kāi)16GB陣列。每個(gè)IP的32位索引由4個(gè)字節(jié)組成,
海量數(shù)據(jù)算法:如何從超過(guò)10G的記錄IP地址的日志中,較快的找出登錄次數(shù)最多的一個(gè)IP?
答案太復(fù)雜了。如果仔細(xì)計(jì)算,IP地址是4字節(jié),最多是4G。打開(kāi)16GB陣列。每個(gè)IP的32位索引由4個(gè)字節(jié)組成,是數(shù)組的索引。數(shù)組中的每個(gè)元素都是32位整數(shù),它記錄并自動(dòng)增加與索引對(duì)應(yīng)的IP出現(xiàn)次數(shù)。如果你讀10GB,你就能知道誰(shuí)的日志最大。你不用教我怎么找到最大的,是嗎?
這樣,如果磁盤(pán)足夠快,數(shù)據(jù)應(yīng)該在30秒內(nèi)發(fā)送出去。
php如何統(tǒng)計(jì)ip在log文件中出現(xiàn)次數(shù)并排名?
讀取日志,遍歷,前三段作為數(shù)組鍵,匹配一次,對(duì)應(yīng)的鍵值累加。
示例:
foreach($log as$VAL){
if(in) array($VAL,array Keys($array)))$array[“192.168.1”
}]這只是一個(gè)想法。如果192.168.1.12需要處理,取前三段,否則無(wú)法匹配。以上代碼僅供參考,希望能對(duì)您有所幫助。