bitmap 壓縮空間

前言:

bitmap是壓縮空間的一個好方法。

byte  ->   8 bits  -->1字節
char  ->   16 bit  -->2字節
short ->   16 bits -->2字節
int   ->   32 bits -->4字節
float ->   32 bits -->4字節
long  ->   64 bits -->8字節

 8bit = >1byte  1024btye=>1KB 1024KB =>1MB 1024MB =>1GB

問題引入:

試想現在有一個場景,如果現在需要實現,在一段時間內,會有10億的手機用戶登錄,現在有一個手機登錄,怎麼知道該手機是否已經登錄,並把內存壓縮到最小呢

 如果使用int數組存儲的話大概要10億*4字節=400000000/1024KB= 3906250KB=3906250/1024MB=‭3814.697265625‬MB≈3.7GB

如果用hashmap的key-value存儲的話,還會更大。

而bitmap用的是數組的標誌位來表達該數是否存在。借用網圖,使用byte[i]座標來表達數字。

 對於國內手機用戶,11位數,即最多19999999999,約算200億,200億*1/8/1024/1024/1024GB=2.3GB

因爲國內手機用戶都是以1開頭,若不算第一位約算100億,大約是1.15GB

 倘若我們繼續優化只計算目前市場流行的幾種136,156...等開頭的能繼續節省不少的空間。

因此可以看到使用bitmap能夠節省大量的空間。

 

但是這種bitmap並不是沒有弱點:

1.數據碰撞,如果用bitmap存儲String類型的時候,有可能出現兩個String的int相同情況,這個時候可以使用布隆過濾器(bloom filter)。

2.數據稀疏,如果用bitmap就存儲幾個數據的時候,可以使用RoaringBitmap(高效壓縮位圖)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章