海量數(shù)據(jù)算法:如何從超過10G的記錄IP地址的日志中,較快的找出登錄次數(shù)最多的一個IP?這種海量數(shù)據(jù)中找出出現(xiàn)次數(shù)最多的一項,這類問題如何解現(xiàn)在網(wǎng)上的答案通常
采樣隨機位置從樣本里取出10塊數(shù)據(jù),每塊數(shù)據(jù)1k,數(shù)據(jù)塊之間不重合。
然后統(tǒng)計一下這10塊數(shù)據(jù)中哪個IP地址出現(xiàn)的次數(shù)最多即可。
10g的日志,應(yīng)該是文本類型的。10g的文本文件遍歷一遍基本上必須的。逐行讀取,正則匹配出IP地址轉(zhuǎn)行成數(shù)字類型,變成數(shù)組,讀取每一行都判斷數(shù)組中是否存在,如果有計數(shù)器加一,如果沒有新建一個。雖然有一些算法可以減少遍歷,比如在遍歷到超過一半之后,如果發(fā)現(xiàn)有IP超過了總數(shù)的一半兒,后面就不需要遍歷了,比如剩余30%之后,所有跟第一名差距超過30%的可以都不計數(shù)了,但是這種情況基本在最后才會遇見,判斷的時間超過計數(shù)器的時間。性價比最好的就是遍歷一般計數(shù)器來實現(xiàn)。
網(wǎng)上的答案需要十幾分鐘是什么答案?能闡述一下嗎?
存儲日志一般來說用ELK的概率比較高。
堆服務(wù)器,分庫查詢??
不夠快就再加服務(wù)器,理論上0.1秒也是可以的。
這些答案想的太復(fù)雜了。你仔細(xì)算一下,ip地址是4個字節(jié),也就是最多4G個。開一個16GB的數(shù)組,每個ip的4字節(jié)組成的32位數(shù)就是這個數(shù)組的索引,數(shù)組中每個元素32位整數(shù),記錄并自增這個索引對應(yīng)的ip出現(xiàn)的次數(shù)。這樣,你讀一邊10GB日志,也就算出最大的是誰了。找最大應(yīng)該不用教對吧?
這樣,如果磁盤夠快,30秒以內(nèi)就應(yīng)該出數(shù)據(jù)了。
假設(shè)是n條記錄,每個IP地址按點的分割,劃分為四列。以第一部分為例,遍歷一次(映射到一個連續(xù)的255個字節(jié)中),得出哪個數(shù)出現(xiàn)次數(shù)最多,對符合條件的第二列遍歷,再選出第二列哪個數(shù)出現(xiàn)次數(shù)最多(對第一列出現(xiàn)最多的數(shù)量標(biāo)記,可選,數(shù)量不多可以采用),依次類推?梢杂枚嗑程甚至多臺計算機同時計算。
這個問題所用算法應(yīng)該可以歸結(jié)為經(jīng)典的wordcount,不復(fù)雜,網(wǎng)上搜一下代碼即可,不再贅述。
至于具體實現(xiàn),有兩種路線。第一是自己在網(wǎng)上開源代碼基礎(chǔ)上寫一個專用程序,運行在大內(nèi)存機器上,程序把數(shù)據(jù)全部加載到內(nèi)存中,實現(xiàn)內(nèi)存計算,為了加快速度,可以使用多線程。第二條路線是用支持內(nèi)存計算的框架,比如spark,這樣程序更簡單,而且可以實現(xiàn)多機分布式并行檢索,代價是需要學(xué)習(xí)不少東西。
elk日志系統(tǒng)幾秒就得到你要的結(jié)果
華裔女賭王就此沒落,生前讓所有 濃情端午粽飄香,青浦邀你“云體 上海:“云端”展現(xiàn)端午節(jié)文化內(nèi) “甜咸大戰(zhàn)”!明星藝人們喜歡什 如何做一個男人喜歡的情人(如何 當(dāng)你和你同時出現(xiàn)在同一個場景中 如何在昏暗的光線下設(shè)置快門速度 教育在生活中的價值是什么? 世上做壞事的人死后會面臨什么因 拜登就任總統(tǒng)后的第一步是什么? 同意/不同意:人生最重要的目標(biāo) 二戰(zhàn)后,德國在調(diào)和分歧方面做得 亞伯·林肯恨白人嗎? 一個編輯能把你的故事毀得有多嚴(yán) 現(xiàn)在的iPhone6還能堅持再用一年 曹操為什么不殺司馬懿? 現(xiàn)在買房是不是最便宜的時候,現(xiàn) 我身邊的農(nóng)業(yè)銀行營業(yè)廳關(guān)了,AT 歐洲媒體評選CBA最有實力球員, 榮耀play的6+128和榮耀8X的6+128 螞蟻集團是科技公司還是金融公司 請問機友華為mate30P與華為mate3 聽說老詹修剪一次指甲需要5小時 為什么說寶寶“一月睡二月哭三月 戴笠人稱戴老板,這個是怎么叫出 沒有工作能一次性補繳社保么? 我想知道定向師范生和免費師范生 肺癌引起的咳嗽是怎樣的呢? 5000mAh電池的5G手機推薦嗎?要 恒大亞冠表現(xiàn)“差強人意”,你覺