ElasticSearch Roaring bitmap 和跳表聯合查詢


ElasticSearch Roaring map

先把所有數按65535划分, 划分方法就是求商和余數,商代表數字最終在哪一塊,余數代表最終在塊內的數字
比如 1, 65536, 65537, 131073
則分成三個block: 1 | 1,2 | 3

對每一塊的數據做判斷,如果數據量大於4096,就用bitmap對這一塊編碼;否則保持不變,用原來對short格式。
bitmap編碼: 比如 [1, 2, 5, 7]編碼后11001001, 即每一位代表一個數

為什么用4096划分?
固定每塊需要內存65535位,這種情況下,short最多存4096個數,大於4096只能用bitmap,小於4096沒必要做轉換,直接short就可以了。

聯合查詢 使用跳表

  1. 比如3個篩選條件, 共查處3個postid list , 每個list都是順序的

  2. 把list按從數量從最少到最多排列,比如 l1 = [1, 10, 20], l2 = [1, 5, 10, 15, 20], l3 =[2, 4, 8, 10, 15 ,18, 20]
    第一個用10舉例,10有兩個尾巴節點,一個指向自己的20,一個指向 l2的10,這樣就直接跳到了l2的10,就不需要再查l2的5了; 同樣l2的10指向l3的10, 就可以跳過l3的2 4 8

  3. 如果是bitmap 不是short,直接按位與


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM