設計思路
我們以存放 integer 值的 bitmap 來舉例(存放long型別的儲存方式會有所不同),rbm 把乙個 32 位的 integer 劃分為高16 位和低16 位,通過高16位找到該資料儲存在哪個桶中(高 16 位可以劃分 2^16 個桶),把剩餘的低 16 位放入該桶對應的 container 中。
每個桶都有對應的 container,不同的 container 儲存方式不同。依據不同的場景,主要有 3 種不同的 container,分別是 arraycontainer 、 bitmapcontainer 、runcontainer。array container 存放稀疏的資料,bitmap container 存放稠密的資料。若乙個 container 裡面的元素數量小於 4096,使用 array container 來儲存。當 array container 超過最大容量 4096 時,會轉換為 bitmap container。
array container 是 roaring bitmap 初始化預設的 container。array container 適合存放稀疏的資料,其內部資料結構是乙個有序的 short 陣列。陣列初始容量為 4,陣列最大容量為 4096,所以 array container 是動態變化的,當容量不夠時,需要擴容,並且當超過最大容量 4096 時,就會轉換為 bitmap container。由於陣列是有序的,儲存和查詢
RoaringBitmap資料結構及原理
每個roaringbitmap github鏈結 中都包含乙個roaringarray,名字叫highlowcontainer。highlowcontainer儲存了roaringbitmap中的全部資料。roaringarray highlowcontainer 這個名字意味著,會將32位的整形 ...
RoaringBitmap資料結構及原理
首先 每個roaringbitmap github鏈結 中都包含乙個roaringarray,名字叫highlowcontainer。highlowcontainer儲存了roaringbitmap中的全部資料。roaringarray highlowcontainer 這個名字意味著,會將32位的...
DNS原理 HTTP原理 TCP原理
開啟網頁 輸入 檢視本地的dns庫是否存在該 的網域名稱與對應ip位址 接下有兩種情況 本地存在該 網域名稱對應的ip hosts檔案 然後我們直接根據本地快取的dns進行解析,並訪問該網域名稱對應的ip位址,在進行tcp的三次握手,進行與 的連線,當然我們訪問 完畢之後,又進行了四次揮手斷開 本地...