GeekBand C++ Week14 Notes

海量數(shù)據(jù)問題的處理方法:

1.hash map

就是把任意長(zhǎng)度的輸入通過(guò)散列算法編程固定長(zhǎng)度的輸出。這種轉(zhuǎn)換時(shí)一種壓縮映射

哈希表,用來(lái)快速查找刪除,通常要求總的數(shù)據(jù)量可以放入內(nèi)存,散列值空間通常要小于輸入空間载萌,哪些問題可以用到hash表呢物臂。

2.bit map用一個(gè)bit位來(lái)表示某個(gè)元素對(duì)應(yīng)的value瘟滨,而key是該元素锯蛀。由于采用了bit為單位來(lái)存儲(chǔ)數(shù)據(jù),因此在存儲(chǔ)空間方面可以大大節(jié)省馅精。

3.bloom filter

4.heap堆是一種特殊的二叉樹严嗜,每個(gè)節(jié)點(diǎn)的值都大于其子節(jié)點(diǎn)的值,樹是完全平衡的洲敢,而且最后一層的樹葉都在最左邊漫玄,海量數(shù)據(jù)前n大,并且n比較小沦疾,堆可以放入內(nèi)存称近、

5.雙層桶,算法設(shè)計(jì)思想哮塞,無(wú)法處理的時(shí)候分成一個(gè)個(gè)小的單元刨秆,然后根據(jù)一定的策略來(lái)處理這些小單元,從而達(dá)到目的忆畅。第k大衡未,中位數(shù),不重復(fù)或重復(fù)的數(shù)字家凯。因?yàn)樵胤秶艽蠡捍祝荒芾弥苯訉ぶ繁怼K酝ㄟ^(guò)多次劃分逐步確定范圍绊诲,然后最后在一個(gè)可以接受的范圍內(nèi)進(jìn)行送粱,可以通過(guò)多次縮小。雙層只是一個(gè)例子掂之,分治才是其根本抗俄。

6.數(shù)據(jù)庫(kù)索引好比是一本書前面的目錄,能加快數(shù)據(jù)庫(kù)的查詢速度世舰,select * from table1 where id = 44如果沒有索引必須遍歷整個(gè)表动雹,知道id等于44這一行被找到為止,有了索引以后必須是在id這一列上建立的所以跟压,直接在索引里找44胰蝠,也就是在id這一列找,就可以得知這一行的為止震蒋,也就是找到了這一行茸塞,由此可見索引是用來(lái)定位的。它還可以建立表和表之間的連接索引有這么多優(yōu)點(diǎn)喷好,那是不是可以給所有類建立一個(gè)索引呢翔横。索引的缺點(diǎn)有創(chuàng)建維護(hù)索引的時(shí)候肯定要消耗時(shí)間的,比如插入或刪除的時(shí)候梗搅,索引還要占據(jù)物理空間禾唁。

7.倒排索引是一種縮影方法效览,被用來(lái)存儲(chǔ)在全文搜索下某個(gè)單詞在一個(gè)文檔或者一組文檔中的存儲(chǔ)位置的映射。單詞指向包含的文檔荡短,查詢包含的單詞

8.外排序外排序的歸并方法丐枉,置換選擇敗者樹,最優(yōu)歸并樹

9.B+樹掘托,其構(gòu)建過(guò)程中引入了有序數(shù)組瘦锹,從而有效降低了樹的高度,一次性取出一個(gè)連續(xù)的數(shù)組闪盔,這個(gè)操作在磁盤上比取出與數(shù)組相同數(shù)量的離散數(shù)據(jù)要便宜的多弯院,所以磁盤上基本都是B+樹的結(jié)構(gòu)。比較次數(shù)比較少泪掀,存儲(chǔ)系統(tǒng)一次性要讀大塊的數(shù)據(jù)听绳,比一次性讀小塊數(shù)據(jù)要快,這里面可以做很多事情异赫,可以查找一個(gè)區(qū)間椅挣。可以查找一個(gè)數(shù)塔拳,增加一個(gè)節(jié)點(diǎn)很容易鼠证,復(fù)雜度可控,hash表的話性能就要下降靠抑。

10.Trie tree又稱字典樹量九,字典查找樹或者前綴樹,是一種用于快速檢索的多叉樹結(jié)構(gòu)颂碧,如英文字母的字典樹是一個(gè)26叉樹娩鹉,數(shù)字的字典樹是一個(gè)10叉樹。適用范圍是數(shù)據(jù)量大稚伍,重復(fù)多,但是數(shù)據(jù)種類小可以放入內(nèi)存的時(shí)候戚宦。利用字符串的公共前綴來(lái)節(jié)省空間个曙。

11.分布式mapreduce,適用范圍受楼、:數(shù)據(jù)量大垦搬,數(shù)據(jù)種類小可以放入內(nèi)存、

海量數(shù)據(jù)案例1.

上千萬(wàn)艳汽,或者億數(shù)據(jù)猴贰,里面有重復(fù),統(tǒng)計(jì)其中出現(xiàn)次數(shù)最多的前N個(gè)數(shù)據(jù)河狐,分兩種情況米绕,可一次讀入內(nèi)存瑟捣,不可一次讀入。

能否一次性讀入內(nèi)存是去除重復(fù)數(shù)據(jù)量栅干,建立一個(gè)字典迈套,hash map來(lái)進(jìn)行一個(gè)統(tǒng)計(jì)。當(dāng)你在更新每條數(shù)據(jù)的時(shí)候碱鳞,可以用堆來(lái)維護(hù)桑李。這樣會(huì)導(dǎo)致你維護(hù)的次數(shù)增多,如果你是無(wú)法放入內(nèi)存的窿给,可以考慮能不能加以改進(jìn)贵白。出現(xiàn)次數(shù)最多的前100個(gè)。你歸并了以后不能保證找到的是真正最多的一百個(gè)崩泡。外排序會(huì)消耗大量的IO禁荒。效率不高≡驶可以考慮近似統(tǒng)計(jì)圈浇,把實(shí)際中出現(xiàn)最多的放入內(nèi)存。

設(shè)計(jì)一個(gè)可控制規(guī)模的社交網(wǎng)絡(luò)系統(tǒng)靴寂,可以查找兩個(gè)用戶之間的關(guān)系磷蜀。

在數(shù)據(jù)量不大的情況下,所有數(shù)據(jù)可以存放在同一臺(tái)機(jī)器上百炬,那查找兩個(gè)用戶的關(guān)系是單純的搜索褐隆。

當(dāng)數(shù)據(jù)量大的情況下,可以用相似的思路剖踊,用hash庶弃,用戶的前幾位數(shù)字決定存儲(chǔ)在哪個(gè)機(jī)器上,獲得用戶的好友列表德澈,ID機(jī)器名歇攻,再去訪問機(jī)器ID的節(jié)點(diǎn)。訪問另一臺(tái)機(jī)器的成本可能比較高梆造。所以相關(guān)的數(shù)據(jù)要一次讀取完畢缴守。節(jié)點(diǎn)有沒有被訪問過(guò),防止重復(fù)的訪問镇辉,可以建立hashmap屡穗,如果用戶三層關(guān)系才可以聯(lián)系上,可以判斷兩個(gè)用戶是陌生的忽肛。

一個(gè)服務(wù)器有一個(gè)訪問村砂,設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)可以判斷上一秒,上一分和上一小時(shí)的訪問量屹逛。

對(duì)每一個(gè)請(qǐng)求分配當(dāng)前的一個(gè)時(shí)間戳础废,對(duì)時(shí)間戳進(jìn)行排序汛骂,那就是有序序列。用二分查找通過(guò)快速的定位色迂。一分鐘之內(nèi)訪問到哪里香缺。找到了對(duì)應(yīng)的request,如何知道request已經(jīng)進(jìn)行了多少次請(qǐng)求,request可以計(jì)數(shù)歇僧,第幾個(gè)图张。可以知道一共發(fā)生了多少次诈悍。復(fù)雜度祸轮。二分搜索某個(gè)特定時(shí)間request是log n

電商網(wǎng)站,單個(gè)機(jī)器MVC侥钳,在初期一臺(tái)機(jī)器能承受的時(shí)候适袜,CS和BS兩種模型,browser的協(xié)議更加標(biāo)準(zhǔn)一些舷夺。MVC是一個(gè)分層的框架苦酱。簡(jiǎn)單的認(rèn)為client提一個(gè)請(qǐng)求到web server上面,用一個(gè)控制器去請(qǐng)求數(shù)據(jù)庫(kù)和文件資源再返還給用戶给猾。典型的網(wǎng)站結(jié)構(gòu)疫萤,開源的技術(shù)。技術(shù)的選型

login: session和cookie

web server: apache/php/nginx

mvc: templates, spring

db: mysql

登陸的時(shí)候有session表敢伸。Cookie是在瀏覽器端的設(shè)置扯饶,通過(guò)cookie傳遞給server看看session是不是存在,可以認(rèn)為cookie是明碼池颈,session是設(shè)立在服務(wù)器端的尾序。

Nginx在異步和大規(guī)模并發(fā)的時(shí)候有很好的性能。

Mvc模板類

電商網(wǎng)站2.0版本躯砰。SOA

服務(wù)指向結(jié)構(gòu)每币。

Cache APP server,DB server琢歇,fileserver.

遇到性能問題脯爪,第一反應(yīng)就是加cache

SOA的一些特點(diǎn),

Scaling

規(guī)模矿微,graceful degradatron平穩(wěn)地降級(jí)。

如果一個(gè)模塊比方說(shuō)評(píng)論或者廣告宕機(jī)了尚揣,不能影響到整個(gè)網(wǎng)站的訪問涌矢。要保證基本的核心能保證穩(wěn)定的。

Reuse復(fù)用性快骗。當(dāng)我們搭建一些小的服務(wù)可以搭積木可以變成更強(qiáng)大的服務(wù)娜庇。

Ownership有責(zé)任塔次。從設(shè)計(jì)到代碼的完成,到監(jiān)控和alert名秀,

Simplification通過(guò)接口的方式励负。REST

電商網(wǎng)站3.0版本,多了一些組件匕得,前面加了router反向代理继榆。不同的請(qǐng)求放到app server上去。

海量數(shù)據(jù)案例2

聊天系統(tǒng)

facebook message wechat

工作流

Q2get new message

Pull和push汁掠,pull每隔三秒

Online status上次在線的時(shí)間略吨。

Heart beat

每隔一分鐘,自動(dòng)去update

conversation list

數(shù)據(jù)抽樣考阱,長(zhǎng)度為N的鏈表翠忠,不知道n有多大,遍歷一次平均概率取出k個(gè)元素乞榨。

蓄水池抽樣秽之,保存k個(gè)元素,k+1開始

一次掃描每個(gè)元素吃既,top k的算法考榨。

Ab兩個(gè)文件各存放50億個(gè)url,每個(gè)占64字節(jié),內(nèi)存限制4G态秧,找到ab文件共同的URL董虱,存儲(chǔ)到1000個(gè)小文件里,每個(gè)小文件

Bloom filter

有十個(gè)文件申鱼,每個(gè)文件1G愤诱,每一行是用戶的query,每隔query都可能重復(fù),按照query的頻度排序

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捐友,一起剝皮案震驚了整個(gè)濱河市淫半,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌匣砖,老刑警劉巖科吭,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異猴鲫,居然都是意外死亡对人,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門拂共,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)牺弄,“玉大人,你說(shuō)我怎么就攤上這事宜狐∈聘妫” “怎么了蛇捌?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)咱台。 經(jīng)常有香客問我络拌,道長(zhǎng),這世上最難降的妖魔是什么回溺? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任春贸,我火速辦了婚禮,結(jié)果婚禮上馅而,老公的妹妹穿的比我還像新娘祥诽。我一直安慰自己,他們只是感情好瓮恭,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布雄坪。 她就那樣靜靜地躺著,像睡著了一般屯蹦。 火紅的嫁衣襯著肌膚如雪维哈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天登澜,我揣著相機(jī)與錄音阔挠,去河邊找鬼。 笑死脑蠕,一個(gè)胖子當(dāng)著我的面吹牛购撼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谴仙,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼迂求,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了晃跺?” 一聲冷哼從身側(cè)響起揩局,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掀虎,沒想到半個(gè)月后凌盯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烹玉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年驰怎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片二打。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砸西,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芹枷,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布莲趣,位于F島的核電站鸳慈,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏喧伞。R本人自食惡果不足惜走芋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潘鲫。 院中可真熱鬧翁逞,春花似錦、人聲如沸溉仑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)浊竟。三九已至怨喘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間振定,已是汗流浹背必怜。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留后频,地道東北人梳庆。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像卑惜,于是被迫代替她去往敵國(guó)和親膏执。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容