亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 大數據量,海量數據處理方法總結

大數據量,海量數據處理方法總結

熱門標簽:美國地圖標注軟件下載 西安電話自動外呼系統 城市地圖標志怎么標注 怎么修改高德地圖標注 合肥crm外呼系統加盟 漯河電銷回撥外呼系統 硅基電話機器人官網 長沙外呼系統平臺 電話機器人怎么看余額
下面的方法是我對海量數據的處理方法進行了一個一般性的總結,當然這些方法可能并不能完全覆蓋所有的問題,但是這樣的一些方法也基本可以處理絕大多數遇到的問題。下面的一些問題基本直接來源于公司的面試筆試題目,方法不一定最優,如果你有更好的處理方法,歡迎與我討論。

1.Bloom filter

適用范圍:可以用來實現數據字典,進行數據的判重,或者集合求交集

基本原理及要點:
對于原理來說很簡單,位數組+k個獨立hash函數。將hash函數對應的值的位數組置1,查找時如果發現所有hash函數對應位都是1說明存在,很明顯這個過程并不保證查找的結果是100%正確的。同時也不支持刪除一個已經插入的關鍵字,因為該關鍵字對應的位會牽動到其他的關鍵字。所以一個簡單的改進就是 counting Bloom filter,用一個counter數組代替位數組,就可以支持刪除了。

還有一個比較重要的問題,如何根據輸入元素個數n,確定位數組m的大小及hash函數個數。當hash函數個數k=(ln2)*(m/n)時錯誤率最小。在錯誤率不大于E的情況下,m 至少要等于n*lg(1/E)才能表示任意n個元素的集合。但m還應該更大些,因為還要保證bit數組里至少一半為0,則m應該>=nlg(1 /E)*lge 大概就是nlg(1/E)1.44倍(lg表示以2為底的對數)。

舉個例子我們假設錯誤率為0.01,則此時m應大概 是n的13倍。這樣k大概是8個。

注意這里m與n的單位不同,m是bit為單位,而n則是以元素個數為單位(準確的說是不同元素的個數)。通常單個元素的長度都是有很多bit的。所以使用bloom filter內存上通常都是節省的。

擴展:
Bloom filter將集合中的元素映射到位數組中,用k(k為哈希函數個數)個映射位是否全1表示元素在不在這個集合中。Counting bloom filter(CBF)將位數組中的每一位擴展為一個counter,從而支持了元素的刪除操作。Spectral Bloom Filter(SBF)將其與集合元素的出現次數關聯。SBF采用counter中的最小值來近似表示元素的出現頻率。

問題實例:給你 A,B兩個文件,各存放50億條URL,每條URL占用64字節,內存限制是4G,讓你找出A,B文件共同的URL。如果是三個乃至n個文件呢?

根據這個問題我們來計算下內存的占用,4G=2^32大概是40億*8大概是340億,n=50億,如果按出錯率0.01算需要的大概是650億個bit。現在可用的是340億,相差并不多,這樣可能會使出錯率上升些。另外如果這些urlip是一一對應的,就可以轉換成ip,則大大簡單了。

2.Hashing

適用范圍:快速查找,刪除的基本數據結構,通常需要總數據量可以放入內存

基本原理及要點:
hash函數選 擇,針對字符串,整數,排列,具體相應的hash方法。
碰撞處理,一種是open hashing,也稱為拉鏈法;另一種就是closed hashing,也稱開地址法,opened addressing。

擴展:
d-left hashing中的d是多個的意思,我們先簡化這個問題,看一看2-left hashing。2-left hashing指的是將一個哈希表分成長度相等的兩半,分別叫做T1和T2,給T1和T2分別配備一個哈希函數,h1和h2。在存儲一個新的key時,同時用兩個哈希函數進行計算,得出兩個地址h1[key]和h2[key]。這時需要檢查T1中的h1[key]位置和T2中的h2[key]位置,哪一個位置已經存儲的(有碰撞的)key比較多,然后將新key存儲在負載少的位置。如果兩邊一樣多,比如兩個位置都為空或者都存儲了一個key,就把新key 存儲在左邊的T1子表中,2-left也由此而來。在查找一個key時,必須進行兩次hash,同時查找兩個位置。

問題實例:
1). 海量日志數據,提取出某日訪問百度次數最多的那個IP。

IP的數目還是有限的,最多2^32個,所以可以考慮使用hash將ip直接存 入內存,然后進行統計。

3.bit-map

適用范圍:可進行數據的快速查找,判重,刪除,一般來說數據范圍是int 的10倍以下

基本原理及要點:使用bit數組來表示某些元素是否存在,比如8位電話號碼

擴展:bloom filter可以看做是對bit-map的擴展

問題實例:

1)已知某個文件內包含一些電話號碼,每個號碼為8位數 字,統計不同號碼的個數。

8位最多99 999 999,大概需要99m個bit,大概10幾m字節的內存即可。

2)2.5 億個整數中找出不重復的整數的個數,內存空間不足以容納這2.5億個整數。

將bit-map擴展一下,用2bit表示一個數即可,0表示未出現,1表示出現一次,2表示出現2次及以上。或者我們不用2bit來進行表示,我們用兩個bit-map即可模擬實現這個2bit-map。

4. 堆

適用范圍:海量數據前n大,并且n比較小,堆可以放入內存

基本原理及要點:最大堆求前n小,最小堆求前n大。方法,比如求前n小,我們比較當前元素與最大堆里的最大元素,如果它小于最大元素,則應該替換那個最大元素。這樣最后得到的n個元素就是最小的n個。適合大數據量,求前n小,n的大小比較小的情況,這樣可以掃描一遍即可得到所有的前n元素,效率很高。

擴展:雙堆,一個最大堆與一個最小堆結 合,可以用來維護中位數。

問題實例:
1)100w個數中找最大的前100個數。

用一個100個元素大小的 最小堆即可。

5.雙層桶劃分

適用范圍:第k大,中位數,不重復或重復的數字

基本原理及要點:因為元素范圍很大,不能利用直接尋址表,所以通過多次劃分,逐步確定范圍,然后最后在一個可以接受的范圍內進行。可以通過多次縮小,雙層只是一個例子。

擴 展:

問題實例:
1).2.5億個整數中找出不重復的整數的個數,內存空間不足以容納這2.5億個整數。

有點像鴿巢原理,整數個數為2^32,也就是,我們可以將這2^32個數,劃分為2^8個區域(比如用單個文件代表一個區域),然后將數據分離到不同的區域,然后不同的區域在利用bitmap就可以直接解決了。也就是說只要有足夠的磁盤空間,就可以很方便的解決。

2).5億個int找它 們的中位數。

這個例子比上面那個更明顯。首先我們將int劃分為2^16個區域,然后讀取數據統計落到各個區域里的數的個數,之后我們根據統計結果就可以判斷中位數落到那個區域,同時知道這個區域中的第幾大數剛好是中位數。然后第二次掃描我們只統計落在這個區域中的那些數就可以了。

實際上,如果不是int是int64,我們可以經過3次這樣的劃分即可降低到可以接受的程度。即可以先將int64分成2^24個區域,然后確定區域的第幾大數,在將該區域分成2^20個子區域,然后確定是子區域的第幾大數,然后子區域里的數的個數只有2^20,就可以直接利用direct addr table進行統計了。

6.數據庫索引

適用范圍:大數據量的增刪改查

基本原理及要點:利用數據的 設計實現方法,對海量數據的增刪改查進行處理。
擴展:
問題實例:


7.倒排索引(Inverted index)

適用范圍:搜索引擎,關鍵字查詢

基本原理及要點:為何叫倒排索引?一種索引方法,被用來存儲在全文搜索 下某個單詞在一個文檔或者一組文檔中的存儲位置的映射。

以英文為例,下面是要被索引的文本:
T0 = "it is what it is"
T1 = "what is it"
T2 = "it is a banana"
我們就能得到下面 的反向文件索引:
"a": {2}
"banana": {2}
"is": {0, 1, 2}
"it": {0, 1, 2}
"what": {0, 1}
檢索的條件"what", "is" 和 "it" 將對應集合的交集。

正向索引開發出來用來存儲每個文檔的單詞的列表。正向索引的查詢往往滿足每個文檔有序頻繁的全文查詢和每個單詞在校驗文檔中的驗證這樣的查詢。在正向索引中,文檔占據了中心的位置,每個文檔指向了一個它所包含的索引項的序列。也就是說文檔指向了它包含的那些單詞,而反向索引則是單詞指向了包含它的文檔,很容易看到這個反向的關系。

擴展:

問題實例:文檔檢索系統,查詢那些文件包含了 某單詞,比如常見的學術論文的關鍵字搜索。

8.外排序

適用范圍:大數據的排序,去重

基本原理及要 點:外排序的歸并方法,置換選擇 敗者樹原理,最優歸并樹

擴展:

問題實例:
1).有一個1G大小的一個文件,里面每一行是一個詞,詞的大小不超過16個字節,內存限制大小是1M。返回頻數最高的100個詞。

這個數據具有很明顯的特點,詞的大小為16個字節,但是內存只有1m做hash有些不夠,所以可以用來排序。內存可以當輸入緩沖區使用。

9.trie樹

適 用范圍:數據量大,重復多,但是數據種類小可以放入內存

基本原理及要點:實現方式,節點孩子的表示方式

擴展:壓縮實 現。

問題實例:
1).有10個文件,每個文件1G,每個文件的每一行都存放的是用戶的query,每個文件的query都可能重復。要你按照query的頻度排序 。

2).1000萬字 符串,其中有些是相同的(重復),需要把重復的全部去掉,保留沒有重復的字符串。請問怎么設計和實現?

3).尋找熱門查詢:查詢串的重 復度比較高,雖然總數是1千萬,但如果除去重復后,不超過3百萬個,每個不超過255字節。

10.分布式處理 mapreduce

適 用范圍:數據量大,但是數據種類小可以放入內存

基本原理及要點:將數據交給不同的機器去處理,數據劃分,結果歸約。

擴 展:

問題實例:

1).The canonical example application of MapReduce is a process to count the appearances of

each different word in a set of documents:
void map(String name, String document):
// name: document name
// document: document contents
for each word w in document:
EmitIntermediate(w, 1);

void reduce(String word, Iterator partialCounts):
// key: a word
// values: a list of aggregated partial counts
int result = 0;
for each v in partialCounts:
result += ParseInt(v);
Emit(result);
Here, each document is split in words, and each word is counted initially with a "1" value by

the Map function, using the word as the result key. The framework puts together all the pairs

with the same key and feeds them to the same call to Reduce, thus this function just needs to

sum all of its input values to find the total appearances of that word.

2). 海量數據分布在100臺電腦中,想個辦法高效統計出這批數據的TOP10。

3).一共有N個機器,每個機器上有N個數。每個機器最多存 O(N)個數并對它們操作。如何找到N^2個數的中數(median)?


經典問題分析

上千萬or億數據(有 重復),統計其中出現次數最多的前N個數據,分兩種情況:可一次讀入內存,不可一次讀入。

可用思路:trie樹+堆,數據庫索引,劃分 子集分別統計,hash,分布式計算,近似統計,外排序

所謂的是否能一次讀入內存,實際上應該指去除重復后的數據量。如果去重后數據可 以放入內存,我們可以為數據建立字典,比如通過 map,hashmap,trie,然后直接進行統計即可。當然在更新每條數據的出現次數的時候,我們可以利用一個堆來維護出現次數最多的前N個數據,當然這樣導致維護次數增加,不如完全統計后在求前N大效率高。

如果數據無法放入內存。一方面我們可以考慮上面的字典方法能否被改進以適應這種情形,可以做的改變就是將字典存放到硬盤上,而不是內存,這可以參考數據庫的存儲方法。

當然還有更好的方法,就是可以采用分布式計算,基本上就是map-reduce過程,首先可以根據數據值或者把數據hash(md5)后的值,將數據按照范圍劃分到不同的機子,最好可以讓數據劃分后可以一次讀入內存,這樣不同的機子負責處理各種的數值范圍,實際上就是map。得到結果后,各個機子只需拿出各自的出現次數最多的前N個數據,然后匯總,選出所有的數據中出現次數最多的前N個數據,這實際上就是reduce過程。

實際上可能想直接將數據均分到不同的機子上進行處理,這樣是無法得到正確的解的。因為一個數據可能被均分到不同的機子上,而另一個則可能完全聚集到一個機子上,同時還可能存在具有相同數目的數據。比如我們要找出現次數最多的前100個,我們將1000萬的數據分布到10臺機器上,找到每臺出現次數最多的前 100個,歸并之后這樣不能保證找到真正的第100個,因為比如出現次數最多的第100個可能有1萬個,但是它被分到了10臺機子,這樣在每臺上只有1千個,假設這些機子排名在1000個之前的那些都是單獨分布在一臺機子上的,比如有1001個,這樣本來具有1萬個的這個就會被淘汰,即使我們讓每臺機子選出出現次數最多的1000個再歸并,仍然會出錯,因為可能存在大量個數為1001個的發生聚集。因此不能將數據隨便均分到不同機子上,而是要根據hash 后的值將它們映射到不同的機子上處理,讓不同的機器處理一個數值范圍。

而外排序的方法會消耗大量的IO,效率不會很高。而上面的分布式方法,也可以用于單機版本,也就是將總的數據根據值的范圍,劃分成多個不同的子文件,然后逐個處理。處理完畢之后再對這些單詞的及其出現頻率進行一個歸并。實際上就可以利用一個外排序的歸并過程。

另外還可以考慮近似計算,也就是我們可以通過結合自然語言屬性,只將那些真正實際中出現最多的那些詞作為一個字典,使得這個規模可以放入內存。
您可能感興趣的文章:
  • 大數據量時提高分頁的效率
  • 數據庫高并發情況下重復值寫入的避免 字段組合約束
  • 大數據量分頁存儲過程效率測試附測試代碼與結果
  • MySQL數據庫優化經驗詳談(服務器普通配置)
  • MySQL數據庫十大優化技巧
  • SQL Server數據庫的高性能優化經驗總結
  • sql 存儲過程分頁代碼 支持億萬龐大數據量
  • 數據庫性能優化三:程序操作優化提升性能
  • 數據庫性能優化二:數據庫表優化提升性能
  • 數據庫性能優化一:數據庫自身優化提升性能
  • Oracle 數據庫優化實戰心得總結
  • 優化mysql數據庫的經驗總結
  • mysql數據庫優化總結(心得)
  • 關于數據庫優化問題收集匯總
  • oracle數據庫sql的優化總結
  • sql 百萬級數據庫優化方案分享
  • 優化Mysql數據庫的8個方法
  • mysql數據庫sql優化原則(經驗總結)
  • 針對Sqlserver大數據量插入速度慢或丟失數據的解決方法
  • MySQL數據庫優化詳解
  • MySQL中實現高性能高并發計數器方案(例如文章點擊數)
  • 超大數據量存儲常用數據庫分表分庫算法總結
  • sqlserver數據庫優化解析(圖文剖析)
  • 詳解MySQL性能優化(一)
  • 詳解MySQL性能優化(二)
  • 19個MySQL性能優化要點解析
  • 大數據量高并發的數據庫優化詳解

標簽:撫順 瀘州 玉溪 文山 濟源 吉林 商洛 廣西

巨人網絡通訊聲明:本文標題《大數據量,海量數據處理方法總結》,本文關鍵詞  大,數據,量,海量,數據處理,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《大數據量,海量數據處理方法總結》相關的同類信息!
  • 本頁收集關于大數據量,海量數據處理方法總結的相關信息資訊供網民參考!
  • 推薦文章
    天天做人人爱夜夜爽2020| 成人av在线播放| 日本伦理片网站| 九九热国产视频| 精品视频在线观看一区二区 | 美女被草网站| 国产成人啪精品| 四虎久久影院| 午夜欧美成人久久久久久| 韩国毛片基地| 国产成a人片在线观看视频| 欧美激情一区二区三区视频| 天天色成人| 午夜在线观看视频免费 成人| 麻豆系列国产剧在线观看| 日本乱中文字幕系列| 99色精品| 国产视频久久久| 四虎影视库国产精品一区| 美女免费黄网站| 国产一区二区精品久| 国产视频一区二区在线播放| 精品视频一区二区三区| 精品国产亚一区二区三区| 欧美日本免费| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产福利免费视频| 亚洲精品久久玖玖玖玖| 亚洲第一色在线| 日韩中文字幕在线亚洲一区| 免费一级片在线观看| 美女免费黄网站| 亚欧乱色一区二区三区| 亚欧视频在线| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 精品国产一区二区三区国产馆| 韩国毛片基地| 午夜欧美福利| 欧美a级片视频| 精品久久久久久中文| 精品久久久久久影院免费| 久久99欧美| 亚洲精品影院| 午夜精品国产自在现线拍| 国产一区二区精品久| 欧美电影免费看大全| 99热热久久| 四虎影视久久| 欧美大片aaaa一级毛片| 欧美一级视频免费观看| 日韩在线观看视频网站| 国产精品自拍亚洲| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日本特黄一级| 成人a大片在线观看| 日本伦理片网站| 麻豆网站在线免费观看| 国产精品自拍亚洲| 欧美1区| 99色视频| 在线观看成人网 | 999精品在线| 亚洲www美色| 久久国产一区二区| 精品国产一区二区三区久 | a级毛片免费全部播放| 国产极品精频在线观看| 成人影院久久久久久影院| 91麻豆国产| 亚洲第一色在线| 日韩在线观看免费| 欧美日本韩国| 日本在线www| 日日日夜夜操| 国产欧美精品午夜在线播放| 日韩一级精品视频在线观看| 日韩中文字幕一区| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产精品自拍在线观看| 日韩av片免费播放| 久久精品免视看国产成人2021| 亚洲精品中文字幕久久久久久| 午夜欧美福利| 99久久视频| 国产不卡在线看| 美国一区二区三区| 国产精品自拍在线| 美女免费毛片| 欧美a级片视频| 国产韩国精品一区二区三区| 欧美1卡一卡二卡三新区| 日韩男人天堂| 午夜家庭影院| 国产高清在线精品一区二区| 精品视频一区二区三区| 韩国三级一区| 免费一级片在线观看| 国产91素人搭讪系列天堂| 久久国产精品自由自在| 九九久久99综合一区二区| 可以免费看污视频的网站| 99久久网站| 在线观看导航| 四虎影视久久久| 国产激情视频在线观看| 韩国三级视频在线观看| 99久久视频| 欧美激情一区二区三区视频 | 精品视频在线观看视频免费视频| 欧美日本二区| 欧美a级片视频| 高清一级片| 国产精品自拍亚洲| 午夜欧美成人久久久久久| 亚洲天堂免费观看| 欧美日本韩国| 国产不卡高清在线观看视频| 成人免费一级纶理片| 精品国产一区二区三区久 | 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产成a人片在线观看视频| 成人免费观看视频| 四虎精品在线观看| 国产91素人搭讪系列天堂| 国产精品自拍亚洲| 成人a大片在线观看| 精品国产三级a∨在线观看| a级黄色毛片免费播放视频| 国产a毛片| 国产一区二区精品尤物| 四虎影视库| 欧美爱爱网| 久久精品免视看国产成人2021| 精品视频在线看| 中文字幕一区二区三区精彩视频 | 日韩在线观看视频黄| 欧美激情一区二区三区在线播放| 四虎精品在线观看| 国产91素人搭讪系列天堂| 成人免费高清视频| 日韩在线观看免费完整版视频| 日日夜夜婷婷| 亚洲女初尝黑人巨高清在线观看| 国产不卡在线观看视频| 久久国产精品只做精品| 日韩av片免费播放| 国产一区二区精品| 欧美a级片视频| 国产伦久视频免费观看视频| 亚洲第一色在线| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 久草免费在线色站| 一级女性大黄生活片免费| a级毛片免费观看网站| 久久国产一久久高清| 久久精品免视看国产成人2021| 国产视频一区二区在线观看| 999久久66久6只有精品| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 四虎影视库| 国产亚洲免费观看| 日韩在线观看免费完整版视频| 欧美激情一区二区三区在线 | 国产国语对白一级毛片| 999精品视频在线| 久久国产一久久高清| 九九久久99综合一区二区| 黄色福利片| 久久国产影院| 国产福利免费视频| 欧美1区| 黄视频网站免费观看| 国产极品白嫩美女在线观看看| 九九久久国产精品大片| 国产视频久久久久| 成人免费网站久久久| 免费的黄色小视频| 麻豆污视频| 精品国产三级a∨在线观看| 九九久久99综合一区二区| 999久久久免费精品国产牛牛| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 欧美一级视频高清片| 99热精品在线| 日韩一级黄色| 国产成人精品在线| 国产伦精品一区二区三区无广告| 国产不卡在线播放| 精品久久久久久中文字幕一区| 国产一区免费在线观看| a级黄色毛片免费播放视频| 麻豆污视频| 日本特黄特色aaa大片免费| 久久福利影视| 免费的黄视频| 久久精品人人做人人爽97| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 黄视频网站免费观看| 青青久在线视频| 九九久久国产精品|