大資料量統計神器bitmap詳解
bitmap就是使用bit位來標識資料,一個bit具有兩個值:0和1,正好可以標識true和false,8個bit組成一個byte,當統計大資料量數字集時具有運算快速,節省空間的優勢
應用場景:
標識統計使用者簽到:
一般情況下,使用者id都是自增的數字主鍵,當數百萬數千萬使用者量時,可以結合redis來快速標識統計,redis指令:SETBIT key offset value
key:可以編輯包含當前日期的內容作為key
offset:所謂的偏移量,可以設定為id值,即每個bit位對應著一個使用者的狀態
value:只能設定0,1,以0和1來標示true和false
redis查詢指令:getbit key offset
延伸:redis是使用二進位制資料進行儲存的,當set testbit a時,發出get testbit,輸出"a"
在ascii碼錶中,a對應的十進位制數值是97,二進位制數值為01100001
當我們依次按照位數獲取,getbit testbit 0-7,依次輸出0,1,1,0,0,0,0,1
當我們執行指令,setbit testbit 6 1, setbit testbit 7 0,
輸入get testbit,輸出為"b",b對應的十進位制數值是98,二進位制數值為01100010
getbit testbit 0-7,依次輸出0,1,1,0,0,0,1,0
由此可知setbit,getbit本質是在操作key對應value的二進位制資料,這也是為何節省空間的原因,因為本質上是我們操作的是一個二進位制數字
bitmap其他應用場景:快速排序,快速查詢,去重,統計