海量資料處理思想

2021-09-23 05:54:05 字數 846 閱讀 7496

一、stl容器

序列式容器vector/list/deque/stack/queue/heap

關聯式容器(key-value)mongodb

rb-tree:set、map(map同時擁有key和value,set的key就是value)、multiset、multimap(允許重複鍵值)

hashtable:hashset、hashmap、hashmultiset、hashmultimap(不具備自動排序功能)(允許重複鍵值)

2、set和map的區別

set和map一樣所有的元素都會根據鍵值自動排序(各種操作都是轉調rb-tree的操作行)

set元素的鍵值就是實值(實值就是鍵值)

map元素都是pair,同時擁有實值(value)和鍵值(key)(pair第乙個為key,第二個為value)

multiset和multimap執行鍵值重複,插入操作基於rb-tree的inset_equal()

二、處理海量資料

分而治之/hash對映+hashmap統計+堆、快速、歸併排序

1)分而治之/hash對映:大而化小,各個擊破、縮小規模、逐個解決

2)hashmap統計+堆:ip,value進行頻率統計

3)堆、快速、歸併排序:堆排序,得到次數多的ip

併發(concurrent) 和並行(parallel programming)

並行:多個cpu例項或者多台機器同時執行一段邏輯,是真正的同時

併發:通過cpu排程演算法,讓使用者看上去同時執行,實際上從cpu操作層面不是真正的同時,併發往往在場景中有公共的資源

那麼針對這個公用的資源往往產生瓶頸,我們會用tps或者qps來反應這個系統的處理能力    

海量資料處理

1 有一千萬條簡訊,有重複,以文字檔案的形式儲存,一行一條,有 重複。請用5分鐘時間,找出重複出現最多的前10條。方法1 可以用雜湊表的方法對1千萬條分成若干組進行邊掃瞄邊建雜湊表。第一次掃瞄,取首位元組,尾位元組,中間隨便兩位元組作為hash code,插入到hash table中。並記錄其位址和...

海量資料處理

給定a b兩個檔案,各存放50億個url,每個url各占用64位元組,記憶體限制是4g,如何找出a b檔案共同的url?答案 可以估計每個檔案的大小為5g 64 300g,遠大於4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。遍歷檔案a,對每個url求取hash url 1000...

海量資料處理

分而治之 hash對映 hash統計 堆 快速 歸併排序 300萬個查詢字串中統計最熱門的10個查詢。針對此類典型的top k問題,採取的對策往往是 hashmap 堆。hash統計 先對這批海量資料預處理。具體方法是 維護乙個key為query字串,value為該query出現次數的hashtab...