日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

場景題:海量數據如何判重?

來源: 責編: 時間:2023-09-18 21:40:03 303觀看
導讀在海量數據如何確定一個值是否存在?這是一道非常經典的面試場景題。那怎么回答這個問題呢?接下來咱們就詳細的聊一聊。參考答案判斷一個值是否存在?通常有以下兩種解決方案:使用哈希表:可以將數據進行哈希操作,將數據存儲在

在海量數據如何確定一個值是否存在?這是一道非常經典的面試場景題。6za28資訊網——每日最新資訊28at.com

那怎么回答這個問題呢?接下來咱們就詳細的聊一聊。6za28資訊網——每日最新資訊28at.com

參考答案

判斷一個值是否存在?通常有以下兩種解決方案:6za28資訊網——每日最新資訊28at.com

  1. 使用哈希表:可以將數據進行哈希操作,將數據存儲在相應的桶中。查詢時,根據哈希值定位到對應的桶,然后在桶內進行查找。這種方法的時間復雜度為 O(1),但需要額外的存儲空間來存儲哈希表。如果桶中存在數據,則說明此值已存在,否則說明未存在。
  2. 使用布隆過濾器:布隆過濾器是一種概率型數據結構,用于判斷一個元素是否在集合中。它利用多個哈希函數映射數據到一個位數組,并將對應位置置為 1。查詢時,只需要對待查詢的數據進行哈希,并判斷對應的位是否都為 1。如果都為 1,則該數據可能存在;如果有一個位不為 1,則該數據一定不存在。布隆過濾器的查詢時間復雜度為 O(k),其中 k 為哈希函數的個數。

相同點和不同點

它們兩的相同點是:它們都存在誤判的情況。例如,使用哈希表時,不同元素的哈希值可能相同,所以這樣就產生誤判了;而布隆過濾器的特征是,當布隆過濾器說,某個數據存在時,這個數據可能不存在;當布隆過濾器說,某個數據不存在時,那么這個數據一定不存在。6za28資訊網——每日最新資訊28at.com

它們兩的區別主要有以下幾點:6za28資訊網——每日最新資訊28at.com

  1. 存儲機制:哈希表使用一個數組來存儲鍵值對,通過哈希函數將鍵映射到數組的索引位置,然后將值存儲在對應的位置上。而布隆過濾器則使用一個位數組(或位向量),通過多個哈希函數將元素映射到位數組的多個位上。
  2. 查詢操作:哈希表在進行查詢時,通過計算哈希值來定位鍵值對的存儲位置,然后直接獲取對應的值。查詢時間復雜度通常為 O(1)。布隆過濾器在進行查詢時,也通過多個哈希函數計算多個位,然后判斷對應的位是否都為 1 來確定元素是否存在。查詢時間復雜度為 O(k),其中 k 為哈希函數的個數。
  3. 內存占用:哈希表需要根據數據規模來動態調整數組的大小,以保證存儲效率。而布隆過濾器在預先設置位數組的大小后,不會隨數據規模的增加而增長。因此布隆過濾器更適用于海量數據。

結論

哈希表和布隆過濾器都能實現判重,但它們都會存在誤判的情況,但布隆過濾器存儲占用的空間更小,更適合海量數據的判重。6za28資訊網——每日最新資訊28at.com

布隆過濾器實現原理

布隆過濾器的實現,主要依靠的是它數據結構中的一個位數組,每次存儲鍵值的時候,不是直接把數據存儲在數據結構中,因為這樣太占空間了,它是利用幾個不同的無偏哈希函數,把此元素的 hash 值均勻的存儲在位數組中,也就是說,每次添加時會通過幾個無偏哈希函數算出它的位置,把這些位置設置成 1 就完成了添加操作。6za28資訊網——每日最新資訊28at.com

當進行元素判斷時,查詢此元素的幾個哈希位置上的值是否為 1,如果全部為 1,則表示此值存在,如果有一個值為 0,則表示不存在。因為此位置是通過 hash 計算得來的,所以即使這個位置是 1,并不能確定是那個元素把它標識為 1 的,因此布隆過濾器查詢此值存在時,此值不一定存在,但查詢此值不存在時,此值一定不存在。6za28資訊網——每日最新資訊28at.com

并且當位數組存儲值比較稀疏的時候,查詢的準確率越高,而當位數組存儲的值越來越多時,誤差也會增大。6za28資訊網——每日最新資訊28at.com

位數組和 key 之間的關系,如下圖所示:6za28資訊網——每日最新資訊28at.com

圖片6za28資訊網——每日最新資訊28at.com

如何實現布隆過濾器?

布隆過濾器的實現通常有以下兩種方案:6za28資訊網——每日最新資訊28at.com

  1. 通過程序實現(內存級別方案):使用 Google Guava 庫和 Apache Commons 庫實現布隆過濾器。
  2. 通過中間件實現(支持數據持久化):使用 Redis 4.0 之后提供的布隆過濾插件來實現,它的好處是支持持久化,數據不會丟失。

Guava 實現布隆過濾器

使用 Google Guava 庫實現布隆過濾器總共分為以下兩步:6za28資訊網——每日最新資訊28at.com

  1. 引入 Guava 依賴
  2. 使用 Guava API 操作布隆過濾器

具體實現如下。6za28資訊網——每日最新資訊28at.com

① 引入 Guava 依賴

<dependency>    <groupId>com.google.guava</groupId>    <artifactId>guava</artifactId></dependency>

② 使用 Guava API

import com.google.common.hash.BloomFilter;import com.google.common.hash.Funnels;public class BloomFilterExample {    public static void main(String[] args) {        // 創建一個布隆過濾器,設置期望插入的數據量為10000,期望的誤判率為0.01        BloomFilter<String> bloomFilter = BloomFilter.create(Funnels.unencodedCharsFunnel(), 10000, 0.01);        // 向布隆過濾器中插入數據        bloomFilter.put("data1");        bloomFilter.put("data2");        bloomFilter.put("data3");        // 查詢元素是否存在于布隆過濾器中        System.out.println(bloomFilter.mightContain("data1")); // true        System.out.println(bloomFilter.mightContain("data4")); // false    }}

在上述示例中,我們通過 BloomFilter.create() 方法創建一個布隆過濾器,指定了元素序列化方式、期望插入的數據量和期望的誤判率。然后,我們可以使用 put() 方法向布隆過濾器中插入數據,使用 mightContain() 方法來判斷元素是否存在于布隆過濾器中。6za28資訊網——每日最新資訊28at.com

小結

在海量數據如何確定一個值是否存在?通常有兩種解決方案:哈希表和布隆過濾器,而它們兩都存在誤判的情況,但布隆過濾器更適合海量數據的判斷,因為它占用的數據空間更小。布隆過濾器的特征是:當布隆過濾器說,某個數據存在時,這個數據可能不存在;當布隆過濾器說,某個數據不存在時,那么這個數據一定不存在。6za28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-10404-0.html場景題:海量數據如何判重?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: IDC下調中國政務云整體市場5年復合增長率至16.14%

下一篇: 性能測試的需求分析

標簽:
  • 熱門焦點
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • 不容錯過的MSBuild技巧,必備用法詳解和實踐指南

    一、MSBuild簡介MSBuild是一種基于XML的構建引擎,用于在.NET Framework和.NET Core應用程序中自動化構建過程。它是Visual Studio的構建引擎,可在命令行或其他構建工具中使用
  • 學習JavaScript的10個理由...

    作者 | Simplilearn編譯 | 王瑞平當你決心學習一門語言的時候,很難選擇到底應該學習哪一門,常用的語言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 三萬字盤點 Spring 九大核心基礎功能

    大家好,我是三友~~今天來跟大家聊一聊Spring的9大核心基礎功能。話不多說,先上目錄:圖片友情提示,本文過長,建議收藏,嘿嘿嘿!一、資源管理資源管理是Spring的一個核心的基礎功能,不
  • 東方甄選單飛:有些鳥注定是關不住的

    文/彭寬鴻編輯/羅卿東方甄選創始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一年多時間里,東方甄選要脫離抖音自立門戶的傳聞不絕于耳,&ldquo;7
  • 阿里瓴羊One推出背后,零售企業迎數字化新解

    作者:劉曠近年來隨著數字經濟的高速發展,各式各樣的SaaS應用服務更是層出不窮,但本質上SaaS大多局限于單一業務流層面,對用戶核心關切的增長問題等則沒有提供更好的解法。在Saa
  • 小米汽車電池信息疑似曝光:容量101kWh,支持800V高壓快充

    7月14日消息,今日一名博主在社交媒體發布了一張疑似小米汽車電池信息的照片,顯示該電池包正是寧德時代麒麟電池,容量為101kWh,電壓為726.7V,可以預測小
  • 華為將推出盤古數字人大模型 可幫助用戶12小時完成數字人生成

    在今日舉行的2023年華為云數字文娛AI創新峰會上,華為云全球Marketing與銷售服務總裁石冀琳表示,華為云將在后續推出盤古數字人大模型,可幫助用戶12小
  • 滴滴違法違規被罰80.26億 共存在16項違法事實

    滴滴違法違規被罰80.26億 存在16項違法事實開始于2121年7月,歷經一年時間,網絡安全審查辦公室對“滴滴出行”網絡安全審查終于有了一個暫時的結束。據“網信
Top 主站蜘蛛池模板: 民权县| 江北区| 新余市| 棋牌| 利津县| 新安县| 宜黄县| 阿拉善右旗| 马鞍山市| 曲周县| 易门县| 邵东县| 昌黎县| 崇左市| 灵璧县| 易门县| 丘北县| 武冈市| 上犹县| 宾阳县| 巴中市| 奇台县| 家居| 武邑县| 保康县| 涟源市| 盐津县| 石城县| 嘉峪关市| 平塘县| 江达县| 长丰县| 富裕县| 宁蒗| 远安县| 齐齐哈尔市| 珲春市| 宕昌县| 汉川市| 蓬安县| 北碚区|