主頁 > 資料庫 > 解釋一下布隆過濾器原理

解釋一下布隆過濾器原理

2023-04-11 08:35:40 資料庫

鎖屏面試題百日百刷,每個作業日堅持更新面試題,請看到最后就能獲取你想要的,接下來的是今日的面試題:

1.解釋一下布隆過濾器原理

在日常生活中,包括在設計計算機軟體時,我們經常要判斷一個元素是否在一個集合中,比如在字處理軟體中,需要檢查一個英語單詞是否拼寫正確(也就是要判斷它是否在已知的字典中);在 FBI,一個嫌疑人的名字是否已經在嫌疑名單上;在網路爬蟲里,一個網址是否被訪問過等等,最直接的方法就是將集合中全部的元素存在計算機中,遇到一個新元素時,將它和集合中的元素直接比較即可,一般來講,計算機中的集合是用哈希表(hash table)來存盤的,它的好處是快速準確,缺點是費存盤空間,當集合比較小時,這個問題不顯著,但是當集合巨大時,哈希表存盤效率低的問題就顯現出來了,比如說,一個象 Yahoo,Hotmail 和 Gmai 那樣的公眾電子郵件(email)提供商,總是需要過濾來自發送垃圾郵件的人(spamer)的垃圾郵件,一個辦法就是記錄下那些發垃圾郵件的 email地址,由于那些發送者不停地在注冊新的地址,全世界少說也有幾十億個發垃圾郵件的地址,將他們都存起來則需要大量的網路服務器,如果用哈希表,每存盤一億個 email 地址, 就需要 1.6GB 的記憶體(用哈希表實作的具體辦法是將每一個 email 地址對應成一個八位元組的資訊指紋googlechinablog.com/2006/08/blog-post.html,然后將這些資訊指紋存入哈希表,由于哈希表的存盤效率一般只有 50%,因此一個 email 地址需要占用十六個位元組,

一億個地址大約要 1.6GB, 即十六億位元組的記憶體),因此存貯幾十億個郵件地址可能需要上百 GB 的記憶體,除非是超級計算機,一般服務器是無法存盤的,

布隆過濾器只需要哈希表 1/8 到 1/4 的大小就能解決同樣的問題,

Bloom Filter是一種空間效率很高的隨機資料結構,它利用位陣列很簡潔地表示一個集合,并能判斷一個元素是否屬于這個集合,Bloom Filter的這種高效是有一定代價的:在判斷一個元素是否屬于某個集合時,有可能會把不屬于這個集合的元素誤認為屬于這個集合(false positive),因此,Bloom Filter不適合那些“零錯誤”的應用場合,

而在能容忍低錯誤率的應用場合下,Bloom Filter通過極少的錯誤換取了存盤空間的極大節省,

下面我們具體來看Bloom Filter是如何用位陣串列示集合的,初始狀態時,Bloom Filter是一個包含m位的位陣列,每一位都置為0,

為了表達S={x1, x2,…,xn}這樣一個n個元素的集合,Bloom Filter使用k個相互獨立的哈希函式(Hash Function), 它們分別將集合中的每個元素映射到{1,…,m}的范圍中,對任意一個元素x,第i個哈希函式映射的位置hi(x)就會被置 為1(1≤i≤k),注意,如果一個位置多次被置為1,那么只有第一次會起作用,后面幾次將沒有任何效果,在下圖中, k=3,且有兩個哈希函式選中同一個位置(從左邊數第五位),

在判斷y是否屬于這個集合時,我們對y應用k次哈希函式,如果所有hi(y)的位置都是1(1≤i≤k),那么我們就認為y是集合中的元素,否則就認為y不是集合中的元素,下圖中y1就不是集合中的元素,y2或者屬于這個集合,或者剛好是一個false positive,

· 為了add一個元素,用k個hash function將它hash得到bloom filter中k個bit位,將這k個bit位置1,

· 為了query一個元素,即判斷它是否在集合中,用k個hash function將它hash得到k個bit位,若這k bits全為1,則此元素在集合中;若其中任一位不為1,則此元素比不在集合中(因為如果在,則在add時已經把對應的k個bits位置為1),

· 不允許remove元素,因為那樣的話會把相應的k個bits位置為0,而其中很有可能有其他元素對應的位,因此remove會引入false negative,這是絕對不被允許的,

布隆過濾器決不會漏掉任何一個在黑名單中的可疑地址,但是,它有一條不足之處,也就是它有極小的可能將一個不在黑名單中的電子郵件地址判定為在黑名單中,因為有可能某個好的郵件地址正巧對應個八個都被設定成一的二進制位,好在這種可能性很小,我們把它稱為誤識概率,

布隆過濾器的好處在于快速,省空間,但是有一定的誤識別率,常見的補救辦法是在建立一個小的白名單,存盤那些可能別誤判的郵件地址,

2.如何實作HBase的二級索引?

方案一: 通常情況下,較原生方式,我們可以采用ES或者Solr來實作hbase的二級索引的操作, 當用戶要寫入資料時候, 基于hbase的observer協處理器攔截下來, 使用es或者Solr來構建hbase的索引資料, 這樣當查詢hbase中資料時候, 可以先去ES中查詢到對應的資料, 然后根據結果, 在從hbase中獲取最終的完整的結果

方案二: 基于Phoenix實作, Phoenix是一款基于hbase的SQL客戶端, 可以使用SQL的方式來操作hbase, 同時為了提升整體的查詢性能, Phoenix中提供了各種索引(全域索引, 本地索引, 覆寫索引以及函式索引), 這些索引都是基于Hbase的協處理器(主要是ObServer協處理器)而實作的, 二基于索引的查詢方案, 也是Phoenix實作hbase二級索引的方式

3.Hbase的storeFile(compact)合并機制是什么?

compact合并機制:

指的memStore中不斷進行flush重繪操作, 就會產生多個storeFile的檔案, 當storeFile的文

件達到一定閾值后, 就會觸發compact的合并機制, 將多個storeFile合并為一個大的HFile檔案

閾值: 達到3個及以上

整個合并程序分為兩大階段:

minor :

作用: 將多個小的storeFile合并為一個較大的Hfile操作

閾值: 達到3個及以上

注意: 此合并程序, 僅僅將多個合并為一個, 對資料進行排序操作, 如果此時資料有過期, 或者有標記為洗掉資料, 此時不做任何的處理 (類似于 記憶體合并中基礎型)

所以說, 此合并操作, 效率比較高

major:

作用: 將較大的HFile 和 之前的大的Hfile進行合并形成一個更大的Hfile檔案 (全域合并)

閾值: 默認 7天

注意: 此合并程序, 會將那些過期的資料, 或者已經標記洗掉的資料, 在這次合并中, 全部

都清除掉,由于這是一種全域合并操作, 對性能影響比較大, 在實際生產中, 建議 關閉掉自動合并, 采用手動觸發的方案

4.Hbase的flush重繪機制?

flush重繪機制(溢寫合并機制):

流程: 客戶端不斷將資料寫入到memStore記憶體中, 當記憶體中資料達到一定閾值后, 需要

將資料溢寫重繪的HDFS中 形成一個storeFile檔案

閾值: 128M 或者 1小時 滿足了那個都會觸發flush機制

內部詳細流程: hbase 2.0架構 以上流程

  1. 客戶端不斷向memStore中寫入資料, 當memStore只資料達到閾值后, 就會啟動flush操作

  2. 首先hbase會先關閉掉當前這個已經達到閾值的記憶體空間, 然后開啟一個新的memStore的空間,用于繼續寫入作業

  3. 將這個達到閾值的記憶體空間資料放入到 記憶體佇列中, 此佇列的特性是只讀, 在hbase 2.0架構中, 可以設定此佇列的資料盡可能晚的重繪到HDFS中, 當這個佇列中資料達到某個閾值后(記憶體不足), 這個時候觸發flush重繪操作 (佇列中可能存盤了多個memStore的資料)

  4. flush執行緒會將佇列中所有的資料全部讀取出來, 然后對資料進行排序合并操作, 將合并后資料存盤到HDFS中, 形成一個storeFile的檔案

注意: 在 hbase2.0以下的架構中, 不存在推遲重繪功能, 同樣也不存在 合并資料的

操作當memStore資料達到閾值后, 放入到佇列中, 專門有一個flush重繪監控佇列, 一旦有資料直接重繪到HDFS上

注意說明:

hbase 2.0 只是提供了基于記憶體的合并功能, 但是默認情況下 不開啟的, 所以 在默認情況

下 整個flush機制基本和2.0以下的版本是一致的, 但是一旦開啟了, 就是剛剛描述流程

合并方案: 三種基礎型(basic): 直接將多個memStore資料合并在一起直接重繪到HDFS上,如果資料存在過期的資料, 或者是已經標記為洗掉的資料, 基礎型不做任何處理

饑渴型(eager): 在將多個memStore合并的程序中, 積極判斷資料是否存在過期, 或者是否已經標記洗掉, 如果有, 直接過濾掉這些標記洗掉和過期的資料即可

適應性(adaptive): 檢查資料是否有過期資料, 如果過期資料量達到一定閾值后, 就會自動使

用饑渴型, 否則就使用基礎型

5.如何解決hbase中資料熱點問題?

所謂資料熱點, 指的是大量的資料寫到hbase的某一個或者某幾個region中, 導致其余的region沒有資料, 其他region對應regionServer的節點承受了大量的并發請求, 此時就出現了熱點問題

解決方案: 通過預磁區和設計良好的rowkey來解決

1)加鹽處理(加亂數) : 可以在rowkey前面動態添加一些亂數, 從而保證資料可以均勻落在不同region中

n 基本保證資料落在不同region

n 將相關性比較強的資料分散在不同的額region中, 導致查詢的效率有一定降低

2)hash處理: 根據rowkey計算其hash值, 在rowkey前面hash計算值即可 (MD5 HASH)

n 讓相關性比較強的資料可以被放置到同一個region中

n 如果相關資料比較多, 依然會導致熱點問題

3)反轉策略: 比如說手機號反轉 或者 時間戳的反轉

n 好處: 基本保證資料落在不同region

n 弊端: 將相關性比較強的資料分散在不同的region中, 導致查詢的效率有一定降低

全部內容在git上,了解更多請點我頭像或到我的主頁去獲得,謝謝

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/549711.html

標籤:其他

上一篇:sql 截取表中指定欄位

下一篇:大資料 + VR 全景技術重塑“二手車買車場景”

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more