海量數據處理

1. 容量計算

解決海量數據問題前,先對數據的容量進行計算。

  • 1 byte = 8 bit
  • 1 KB = 2^10 byte = 1024 byte ≈ 10^3 byte
  • 1 MB = 2^20 byte ≈ 10^6 byte
  • 1 GB = 2^30 byte ≈ 10^9 byte
  • 1 億 = 10^8
  • 1 個int整數佔 4 byte,1 億個整數佔 4*108 byte ≈ 400 MB。

2. 海量數據判重

2.1 HashSet

答:將海量數據拆分到多臺機器上,每臺機器用HashSet存儲,最好是用hash取模方式將一類數據都存放在同一機器上。

2.2 BitSet

答:構建一定大小的比特數組,讓每個整數都映射到比特數組上,從而得知某個整數是否存在。

  • 適用範圍是海量整數數據,且範圍不大。

2.3 布隆過濾器

答:鐵則:布隆過濾器說對其實可能不對,但說不對那就是不對。

布隆過濾器是基於BitSet/BitMap的,每次插入數據都要經過k個哈希函數得到k個位置,把對應位置置爲1。

查找數據時,也是相同流程,得到k個位置,若有一個不爲1,則不存在,若都爲1,可能存在也可能誤判。

  • 布隆過濾器只能插入不能刪除。
  • 優點在於利用很少的空間達到較高的精確率。
  • 多個hash函數,增大隨機性,減少碰撞概率。
  • 擴大BitMap範圍,使hash值均勻分佈,減少碰撞。

2.4 前綴樹

答:利用字符串的公共前綴減少查詢時間,查詢效率高。

前綴樹特性是:

  1. 根節點不包含字符,除根節點外每一個節點都只包含一個字符;
  2. 從根節點到某一節點,路徑上經過的字符連接起來,爲該節點對應的字符串;
  3. 每個節點的所有子節點包含的字符都不相同。
  • 適用範圍是海量字符串數據。

3. 海量數據拆分

答:將數據拆分到多臺機器上/將大文件拆分成小文件,讓多臺機器一起工作/對小文件求解。

3.1 拆分策略

  1. 到達順序:每次來的數據都放進當前Server,放滿再放新增機器。
  • 優點:充分利用系統資源;
  • 缺點:需要查找表來存放數據-機器映射。
  1. 哈希值:用數據的key進行hash取模 N(機器數量) 得到應放入的機器序號。
  • 優點:不需要查找表;
  • 缺點:hash分配不均勻;增加新機器全部重新算hash。
  • 改進就是一致性hash(hash環) + 虛擬節點
  1. 實際含義:例如,社交網站,將來自一個地區的用戶儘可能存儲在同一個機器上。
  • 優點:避免多臺機器查找,降低延遲;
  • 缺點:使用查找表。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章