<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

      Google用1%內(nèi)存過(guò)濾99%請(qǐng)求

      0
      分享至


      每秒216萬(wàn)次查詢(xún),怎么做到不重復(fù)推薦?這是InfoQ一篇技術(shù)長(zhǎng)文里的真實(shí)數(shù)字——某推薦系統(tǒng)峰值時(shí)要處理18000請(qǐng)求/秒,每個(gè)請(qǐng)求檢查120條候選內(nèi)容是否被用戶(hù)看過(guò)。傳統(tǒng)數(shù)據(jù)庫(kù)扛不住,Redis集群也肉疼,工程師最后掏出了一個(gè)1970年誕生的老古董。

      答案叫布隆過(guò)濾器(Bloom Filter)。一個(gè)用1%內(nèi)存換取99%過(guò)濾效率的概率型數(shù)據(jù)結(jié)構(gòu)。

      這東西的原理說(shuō)起來(lái)像賭場(chǎng)抽老千:你問(wèn)"這個(gè)用戶(hù)看過(guò)這篇文章嗎",它要么說(shuō)"肯定沒(méi)看過(guò)",要么說(shuō)"可能看過(guò)"。從不說(shuō)謊說(shuō)"肯定看過(guò)",但偶爾會(huì)誤判。代價(jià)是極低的內(nèi)存占用——存100萬(wàn)個(gè)元素只要約1.14MB,而Redis需要幾十倍空間。

      布隆過(guò)濾器的數(shù)學(xué)基礎(chǔ)很樸素。它用一個(gè)長(zhǎng)度為m的二進(jìn)制位數(shù)組,配合k個(gè)獨(dú)立哈希函數(shù)。插入元素時(shí),k個(gè)哈希函數(shù)算出k個(gè)位置,全部置為1。查詢(xún)時(shí),檢查這k個(gè)位是否都為1:但凡有一個(gè)為0,元素絕對(duì)不存在;全為1則"可能存在"。

      誤判率(假陽(yáng)性率)的公式是 (1 - e^(-kn/m))^k。工程師真正要算的是:給定預(yù)期元素?cái)?shù)量n和可接受的誤判率p,該選多大的m、多少個(gè)k?推導(dǎo)結(jié)果是 m = -n·ln(p)/(ln2)^2k = m/n·ln2

      以實(shí)際場(chǎng)景為例:預(yù)期100萬(wàn)元素,誤判率1%,需要約143.8萬(wàn)位(約1.72MB),哈希函數(shù)7個(gè)。誤判率壓到0.1%,內(nèi)存漲到2.58MB,哈希函數(shù)10個(gè)。這是典型的工程權(quán)衡——精度換空間,或空間換精度。

      Go語(yǔ)言實(shí)現(xiàn)布隆過(guò)濾器相當(dāng)直白。位數(shù)組用 []uint64,哈希函數(shù)選MurmurHash3或xxHash這類(lèi)高性能非加密哈希。核心操作是位運(yùn)算:定位到具體uint64,再算位偏移。

      代碼結(jié)構(gòu)通常三層:底層是位集(BitSet)的讀寫(xiě)封裝,中間是哈希策略接口,上層是BloomFilter結(jié)構(gòu)體暴露Add和Contains方法。Go的內(nèi)存布局和指針運(yùn)算讓這種位級(jí)操作很可控,沒(méi)有C的指針噩夢(mèng),也沒(méi)有Java的裝箱開(kāi)銷(xiāo)。

      但布隆過(guò)濾器有個(gè)致命缺陷:不能刪除。位被多個(gè)元素共享,貿(mào)然清零會(huì)誤傷。計(jì)數(shù)布隆過(guò)濾器(Counting Bloom Filter)用4位或8位計(jì)數(shù)器代替單比特,支持刪除,內(nèi)存也相應(yīng)膨脹4-8倍。還有布谷鳥(niǎo)過(guò)濾器(Cuckoo Filter),用另一種哈希方案實(shí)現(xiàn)可刪除,但實(shí)現(xiàn)復(fù)雜度和內(nèi)存效率各有取舍。

      工程落地時(shí),布隆過(guò)濾器常作為"預(yù)過(guò)濾器"存在。查詢(xún)先過(guò)布隆,不存在直接返回,存在再走數(shù)據(jù)庫(kù)或緩存驗(yàn)證。這樣把昂貴的存儲(chǔ)查詢(xún)砍掉大部分,只剩少量誤判需要二次確認(rèn)。文章里的推薦系統(tǒng)正是這個(gè)套路:先過(guò)濾掉用戶(hù)已讀內(nèi)容,再對(duì)剩余候選做精排。

      分布式場(chǎng)景更有意思。Google的Bigtable用布隆過(guò)濾器減少磁盤(pán)IO,查詢(xún)前先檢查內(nèi)存中的布隆過(guò)濾器,避免訪問(wèn)根本不存在的數(shù)據(jù)塊。LevelDB、RocksDB同理,每個(gè)SSTable文件配一個(gè)布隆過(guò)濾器,讀放大顯著降低。這是存儲(chǔ)引擎的標(biāo)配優(yōu)化,但用戶(hù)通常無(wú)感知。

      參數(shù)調(diào)優(yōu)是門(mén)手藝。元素?cái)?shù)量預(yù)估偏差太大,實(shí)際誤判率會(huì)偏離設(shè)計(jì)值。哈希函數(shù)太多,計(jì)算開(kāi)銷(xiāo)上升;太少,誤判率壓不住。位數(shù)組太大,內(nèi)存浪費(fèi);太小,精度崩盤(pán)。沒(méi)有銀彈,只有針對(duì)具體 workload 的反復(fù)測(cè)試。

      文章作者用Go寫(xiě)了個(gè)實(shí)現(xiàn),核心代碼不過(guò)兩百行。測(cè)試覆蓋各種邊界:空過(guò)濾器、重復(fù)插入、誤判率統(tǒng)計(jì)。benchmark顯示單次查詢(xún)約20-50納秒,內(nèi)存訪問(wèn)是瓶頸——現(xiàn)代CPU算哈希比讀內(nèi)存快。

      什么場(chǎng)景不該用布隆過(guò)濾器?需要精確答案的場(chǎng)合,比如金融交易對(duì)賬、醫(yī)療診斷系統(tǒng)。假陽(yáng)性的代價(jià)太高,寧可多花內(nèi)存用精確集合。元素?cái)?shù)量極小(幾千個(gè))也不值得,哈希表的常數(shù)開(kāi)銷(xiāo)更低。還有需要遍歷所有元素的場(chǎng)景——布隆過(guò)濾器根本存不下原始數(shù)據(jù)。

      布隆過(guò)濾器的變體很多。分層布隆過(guò)濾器處理元素動(dòng)態(tài)增長(zhǎng),可擴(kuò)展布隆過(guò)濾器(Scalable Bloom Filter)用多個(gè)子過(guò)濾器串聯(lián),元素增多時(shí)新建更大的過(guò)濾器,查詢(xún)時(shí)逐個(gè)檢查。這些擴(kuò)展解決原始設(shè)計(jì)的剛性,但復(fù)雜度也線(xiàn)性上升。

      回到文章開(kāi)頭的推薦系統(tǒng)。216萬(wàn)次查詢(xún)/秒,如果用Redis Set,按每個(gè)元素64位估算,100萬(wàn)元素需要約8MB內(nèi)存,查詢(xún)是O(1)但網(wǎng)絡(luò)RTT致命。布隆過(guò)濾器常駐進(jìn)程內(nèi)存,查詢(xún)是幾十納秒的本地操作,差距是數(shù)量級(jí)的。

      作者最后提到一個(gè)細(xì)節(jié):他們的生產(chǎn)環(huán)境用了分層策略。熱數(shù)據(jù)用精確集合保證體驗(yàn),冷數(shù)據(jù)用布隆過(guò)濾器省內(nèi)存。用戶(hù)最近看過(guò)的幾百篇文章絕對(duì)不準(zhǔn)重復(fù),幾年前的舊內(nèi)容偶爾誤判也無(wú)傷大雅。工程是妥協(xié)的藝術(shù),不是算法的炫技。

      布隆過(guò)濾器的發(fā)明者Burton Bloom在1970年的論文里,大概想不到這個(gè)結(jié)構(gòu)會(huì)在50年后支撐每秒數(shù)十億次的互聯(lián)網(wǎng)請(qǐng)求。概率型數(shù)據(jù)結(jié)構(gòu)的魅力就在于此:接受微小的不確定性,換取巨大的資源效率。這不是缺陷,是設(shè)計(jì)。

      文章末尾,作者留了個(gè)未解的問(wèn)題:他們的實(shí)現(xiàn)用了固定大小的位數(shù)組,生產(chǎn)環(huán)境怎么優(yōu)雅處理元素?cái)?shù)量超出預(yù)期的場(chǎng)景?擴(kuò)容意味著重建過(guò)濾器,服務(wù)怎么做到無(wú)感知?

      特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶(hù)上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關(guān)推薦
      熱點(diǎn)推薦
      法國(guó)總理疑用ChatGPT寫(xiě)推文引發(fā)爭(zhēng)議

      法國(guó)總理疑用ChatGPT寫(xiě)推文引發(fā)爭(zhēng)議

      新歐洲
      2026-04-06 18:12:24
      為足總杯讓路,曼城、切爾西的英超第34輪比賽提前進(jìn)行

      為足總杯讓路,曼城、切爾西的英超第34輪比賽提前進(jìn)行

      懂球帝
      2026-04-07 18:15:14
      萬(wàn)斯出馬力保歐盟親華派,事成之后,也算幫了中國(guó)一個(gè)忙

      萬(wàn)斯出馬力保歐盟親華派,事成之后,也算幫了中國(guó)一個(gè)忙

      溫讀史
      2026-04-07 19:38:14
      有錢(qián)買(mǎi)不到化肥?俄羅斯限供,中國(guó)嚴(yán)控,全球化肥徹底告急

      有錢(qián)買(mǎi)不到化肥?俄羅斯限供,中國(guó)嚴(yán)控,全球化肥徹底告急

      世界熱點(diǎn)背后解讀
      2026-04-06 15:25:42
      096型戰(zhàn)略核潛艇多猛?臺(tái)專(zhuān)家:美國(guó)更不敢和大陸正面“開(kāi)戰(zhàn)”

      096型戰(zhàn)略核潛艇多猛?臺(tái)專(zhuān)家:美國(guó)更不敢和大陸正面“開(kāi)戰(zhàn)”

      瀲滟晴方DAY
      2026-04-07 19:18:03
      馬杜羅剛被二次審判,委內(nèi)瑞拉新元首就變臉,對(duì)華翻臉惹眾怒

      馬杜羅剛被二次審判,委內(nèi)瑞拉新元首就變臉,對(duì)華翻臉惹眾怒

      觀察者海風(fēng)
      2026-04-07 19:39:50
      普京接連出招,新仇舊恨一起算!日本油盡燈枯,全國(guó)大亂倒計(jì)時(shí)

      普京接連出招,新仇舊恨一起算!日本油盡燈枯,全國(guó)大亂倒計(jì)時(shí)

      肖茲探秘說(shuō)
      2026-04-06 23:14:42
      如果馬寅初沒(méi)提出人口論,沒(méi)有計(jì)劃生育,我國(guó)如今會(huì)變成什么樣子

      如果馬寅初沒(méi)提出人口論,沒(méi)有計(jì)劃生育,我國(guó)如今會(huì)變成什么樣子

      近史談
      2026-04-07 19:33:47
      Woc!才5年6200萬(wàn),老鷹找到了自己的“鷹王”

      Woc!才5年6200萬(wàn),老鷹找到了自己的“鷹王”

      體育新角度
      2026-04-07 18:49:23
      空手套石油?伊朗差點(diǎn)上了印度的當(dāng)!60萬(wàn)桶石油最終改道運(yùn)往中國(guó)

      空手套石油?伊朗差點(diǎn)上了印度的當(dāng)!60萬(wàn)桶石油最終改道運(yùn)往中國(guó)

      黑鷹觀軍事
      2026-04-07 18:27:28
      人能節(jié)儉到什么程度?網(wǎng)友:十幾年沒(méi)換老公,香水只噴人中

      人能節(jié)儉到什么程度?網(wǎng)友:十幾年沒(méi)換老公,香水只噴人中

      另子維愛(ài)讀史
      2026-04-06 19:10:34
      皇馬vs拜仁前瞻:歐洲德比戰(zhàn)火重燃

      皇馬vs拜仁前瞻:歐洲德比戰(zhàn)火重燃

      西哇體育
      2026-04-07 18:36:07
      從朝鮮回來(lái)我沉默了!打破所有刻板印象,不為人知的真相太扎心!

      從朝鮮回來(lái)我沉默了!打破所有刻板印象,不為人知的真相太扎心!

      老特有話(huà)說(shuō)
      2026-04-07 13:55:59
      1955年有人不贊成陳毅授元帥,毛主席反駁:3年游擊戰(zhàn)不是白打的

      1955年有人不贊成陳毅授元帥,毛主席反駁:3年游擊戰(zhàn)不是白打的

      新一說(shuō)史
      2026-04-07 16:58:15
      靠7個(gè)員工和1只貓,年入2500萬(wàn)美元!這可能是AI時(shí)代最好的模板

      靠7個(gè)員工和1只貓,年入2500萬(wàn)美元!這可能是AI時(shí)代最好的模板

      DeepTech深科技
      2026-04-06 20:33:49
      27歲單親媽媽開(kāi)直播,播著播著睡著了,醒來(lái)一看后臺(tái)直接傻眼了

      27歲單親媽媽開(kāi)直播,播著播著睡著了,醒來(lái)一看后臺(tái)直接傻眼了

      小椰的奶奶
      2026-04-01 17:04:55
      太黑了!315晚會(huì)后,最先塌房的不是奶茶,也不是辣條,而是雞蛋

      太黑了!315晚會(huì)后,最先塌房的不是奶茶,也不是辣條,而是雞蛋

      小熊侃史
      2026-04-07 07:20:08
      王皓總結(jié)世界杯:壓力大失眠,王楚欽拯救了我們,溫瑞博還稚嫩

      王皓總結(jié)世界杯:壓力大失眠,王楚欽拯救了我們,溫瑞博還稚嫩

      帛河體育
      2026-04-06 20:09:11
      市委書(shū)記暗訪撞見(jiàn)民工被派出所長(zhǎng)毆打,走近一看,被打者是他二叔

      市委書(shū)記暗訪撞見(jiàn)民工被派出所長(zhǎng)毆打,走近一看,被打者是他二叔

      歷史八卦社
      2024-08-21 18:13:16
      伊朗早已想好了:打完這場(chǎng)仗,自己將成阿拉伯國(guó)家的新“保護(hù)傘”

      伊朗早已想好了:打完這場(chǎng)仗,自己將成阿拉伯國(guó)家的新“保護(hù)傘”

      十夏九漓
      2026-04-05 13:56:19
      2026-04-07 20:23:00
      野生運(yùn)營(yíng)
      野生運(yùn)營(yíng)
      懂點(diǎn)產(chǎn)品,懂點(diǎn)AI,正在努力給平淡日子搞點(diǎn)新花樣。
      867文章數(shù) 10關(guān)注度
      往期回顧 全部

      科技要聞

      滿(mǎn)嘴謊言!OpenAI奧特曼黑料大起底

      頭條要聞

      英媒:伊朗最高領(lǐng)袖病重昏迷 無(wú)法參與任何國(guó)家決策

      頭條要聞

      英媒:伊朗最高領(lǐng)袖病重昏迷 無(wú)法參與任何國(guó)家決策

      體育要聞

      官宣簽約“AI球員”,這支球隊(duì)被罵慘了...

      娛樂(lè)要聞

      女首富陳麗華離世 被曝生前已分好遺產(chǎn)

      財(cái)經(jīng)要聞

      10萬(wàn)億財(cái)政轉(zhuǎn)移支付,被誰(shuí)拿走了?

      汽車(chē)要聞

      不止是大 極狐首款MPV問(wèn)道V9靜態(tài)體驗(yàn)

      態(tài)度原創(chuàng)

      家居
      教育
      藝術(shù)
      本地
      公開(kāi)課

      家居要聞

      雅致愜意 感知生活之美

      教育要聞

      高校官宣:教師,沒(méi)有“非升即走”!

      藝術(shù)要聞

      美麗風(fēng)光看不盡

      本地新聞

      跟著歌聲游安徽,聽(tīng)古村回響

      公開(kāi)課

      李玫瑾:為什么性格比能力更重要?

      無(wú)障礙瀏覽 進(jìn)入關(guān)懷版