一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

百萬并發(fā)場景中倒排索引與位圖計算的實踐

OSC開源社區(qū) ? 來源:OSCHINA 社區(qū) ? 2023-01-10 10:35 ? 次閱讀

背景

Promise 時效控單系統(tǒng)作為時效域的控制系統(tǒng),在用戶下單前、下單后等多個節(jié)點均提供服務(wù),是用戶下單黃金鏈路上的重要節(jié)點;控單系統(tǒng)主要邏輯是針對用戶請求從規(guī)則庫中找出符合條件的最優(yōu)規(guī)則,并將該規(guī)則的時效控制結(jié)果返回客戶端,比如因為臨時疫情等原因針對倉、配、商家、客戶四級地址等不同維度進行精細粒度的時效控制。 該系統(tǒng)也是 Promise 側(cè)并發(fā)量最大的系統(tǒng),雙 11 高峰集群流量 TPS 在百萬級別,對系統(tǒng)的性能要求非常高,SLA 要求在 5ms 以內(nèi),因此對海量請求在規(guī)則庫 (幾十萬) 中如何快速正確匹配規(guī)則是該系統(tǒng)的技術(shù)挑戰(zhàn)點。

樸素的解決方案

按照樸素的思想,在工程建設(shè)上,通過異步方式將規(guī)則庫逐行緩存到 Redis,Key 為規(guī)則條件,Value 為規(guī)則對應(yīng)結(jié)果;當用戶請求過來時,對請求 Request (a,b,c,d..) 中的參數(shù)做全組合,根據(jù)全組合出的 Key 嘗試找出所有可能命中的規(guī)則,再從中篩選出最優(yōu)的規(guī)則。如下圖所示

3872ffc4-902a-11ed-bfe3-dac502259ad0.png

該方案面臨的問題是全組合的時間復(fù)雜度是 2**n,n≈12;算法的時間復(fù)雜度高且算法穩(wěn)定性差,最差情況一次請求需要 4096 次計算和讀取操作。當然在工程上我們可以使用本地緩存做一些優(yōu)化,但是無法解決最根本的性能問題。架構(gòu)簡圖如下所示:

389ae19c-902a-11ed-bfe3-dac502259ad0.png

新的解決方案

上面方案是從行的角度看待匹配定位的,能夠命中的行的每一列必然也是符合條件的,這里面存在某種隱約的內(nèi)在聯(lián)系。能否反過來思考這個問題,為此我們嘗試進行新的方案,當然架構(gòu)簡圖依然如上圖所示,核心優(yōu)化的是命中算法。 新的方案整體采用列的倒排索引和倒排索引位運算的方式,使得計算復(fù)雜度由原來的 2n 降至 n**,且算法穩(wěn)定性有非常好的保證。其中列的倒排索引是對每列的值和所分布的行 ID (即 Posting List) 建立 KV 關(guān)系,倒排索引位運算是對符合條件的列倒排索引進行列間的位運算,即通過聯(lián)合查詢以便快速找到符合條件的規(guī)則行。

算法詳細設(shè)計

1. 預(yù)計算生成列的倒排索引和位圖

通過對每列的值進行分組合并生成 Posting List,建立列值和 Posting List 的 KV 關(guān)系。以下圖為例,列 A 可生成的倒排索引為:301={1},201={2,3,4,5} 等,需要說明的一點,空值也是一種候選項,也需要生成 KV 關(guān)系,如 nil={7}。

38b07b2e-902a-11ed-bfe3-dac502259ad0.png

2. 生成列的倒排索引對應(yīng)位圖

將步驟 1 的倒排索引轉(zhuǎn)成成位圖,方便后續(xù)的位圖計算,轉(zhuǎn)換規(guī)則為行 ID 對應(yīng)位圖的下標位(步驟 1、2 可以合并操作)。

38d8b4ea-902a-11ed-bfe3-dac502259ad0.png

3. 根據(jù)用戶請求查找列位圖,通過位圖計算生成候選規(guī)則集

將用戶請求中的入?yún)⒆鳛?Key,查找符合條件的位圖,對每一列進行列內(nèi)和空值做 || 運算,最后列間位圖做 & 運算,得到的結(jié)果是候選規(guī)則集,如下圖所示:

38eac7ac-902a-11ed-bfe3-dac502259ad0.png

4. 從候選規(guī)則庫中,根據(jù)業(yè)務(wù)優(yōu)先級排序,查找最優(yōu)的規(guī)則

以候選規(guī)則為基點,按照業(yè)務(wù)優(yōu)先級排序,進行逐級位運算 &,當遍歷完或位運算為 0 時,找到最后不為空的即為最優(yōu)規(guī)則,該過程是從候選規(guī)則庫逐漸縮小最優(yōu)范圍的過程。需要說明某列當用戶請求位圖不存在時,需要使用對應(yīng)的空位圖進行參與,以 B 列為例,入?yún)?B_1102 不存在,需要使用 B_nil 參與 &。

392a8338-902a-11ed-bfe3-dac502259ad0.png

復(fù)雜度分析

通過上面的例子我們可以看到,在時間復(fù)雜度方面查找候選規(guī)則集時,進行一輪 || 運算,一輪 & 運算;在查找最優(yōu)規(guī)則時進行一輪 & 運算,所以整體復(fù)雜度是 3n≈n。 在空間復(fù)雜度方面,相比原來的行式存儲,倒排索引的存儲方式,每列都需要存儲行 ID,相當于多了 *(n-1)Posting List 存儲空間,當然這是粗略計算,因為實際上行 ID 的存儲最終轉(zhuǎn)換為位圖存儲,在空間上有非常大的壓縮空間。

工程問題 - 壓縮位圖

如果倒排索引位圖非常稀疏,系統(tǒng)會存在非常大的空間浪費。我們舉一個極端 case,若千萬規(guī)則庫中命中的行 ID 是第 1000 萬位,按照傳統(tǒng)方式 BitSet 進行存儲,需要消耗 1.2MB 空間,在內(nèi)存中占用存在嚴重浪費,有沒有壓縮優(yōu)化方案,在 RoaringBitMap 壓縮位圖方案中我們找到,相同場景在壓縮位圖方式下僅占 144bytes;即使在 1000 萬的位圖空間,我們隨機存儲 1 萬個值,兩者比也是在 31K vs 2MB,近 100 倍的差距,總的來說 RoaringBitMap 壓縮率非常大。 RoaringBitMap 本質(zhì)上是將大塊的 bitmap 拆分成各個小塊,其中每個小塊在需要存儲數(shù)據(jù)的時候才會存在,所以當進行交集或并集運算的時候,RoaringBitMap 只需要去計算存在的塊而不需要像 bitmap 那樣對整個大塊進行計算,既做到了壓縮的存儲又做到計算性能的提升。 以下圖 821697800 為例,對應(yīng)的 16 進制數(shù)為 30FA1D08, 其中高 16 位為 30FA,低 16 位為 1D08。先用二分查找從一級索引(即 Container Array)中找到數(shù)值為 30FA 的容器,該容器是一個 Bitmap 容器,然后在該容器查找低 16 位的數(shù)值 1D08,即十進制下 7432,在 Bitmap 中找到相應(yīng)的位置,將其置為 1 即可。

3970defa-902a-11ed-bfe3-dac502259ad0.png

適用場景分析

回顧上面的設(shè)計方案我們可以看到,這種方式僅適用于 PostingList 簡單如行 ID 的形式,如果是復(fù)雜對象就不適合用位圖來存儲。另外僅適用于等值查詢,不適用于 like、in 的范圍查詢,為什么有這種局限性?因為這種方式依賴于搜索條件的空間,在方案中我們將值的條件作為搜索的 Key,值的條件空間希望盡可能是一個有限的、方便窮舉的、小的空間。而范圍查詢導(dǎo)致這個空間變成難以窮舉、近乎無限擴張的、所以不適用。

其他優(yōu)化方式

除了使用位運算的方式對倒排索引加速,考慮到 Posting List 的有序性,還有其他的方式比如使用跳表、Hash 表等方式,以 ES 中采用的跳表為例,進行 & 運算實際就是在查找兩個有序 Posting List 公共部分,以相互二分查找的形式,將時間復(fù)雜度控制在 log (n) 的級別。 具體參見《工業(yè)界如何利用跳表、哈希表、位圖進行倒排索引加速?》:https://time.geekbang.org/column/article/221292?utm_source=related_read&utm_medium=article&utm_term=related_read

399ab9be-902a-11ed-bfe3-dac502259ad0.png

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 索引
    +關(guān)注

    關(guān)注

    0

    文章

    59

    瀏覽量

    10611
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    382

    瀏覽量

    11250
  • 位圖
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    2370

原文標題:百萬并發(fā)場景中倒排索引與位圖計算的實踐

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    H110M-K點位圖

    H110M-K點位圖
    發(fā)表于 04-14 14:51 ?1次下載

    TurMass? 如何幫助解決 UWB 定位系統(tǒng)大規(guī)模終端標簽高并發(fā)通信沖突問題?

    在大容量定位終端數(shù)據(jù)高并發(fā)場景,現(xiàn)有通信技術(shù)因信號沖突、系統(tǒng)容量受限等問題,難以滿足需求。TurMass? 通信技術(shù)通過多信道設(shè)計、時隙劃分、定位與通信一體化等創(chuàng)新方案,有效解決了高并發(fā)
    的頭像 發(fā)表于 03-17 14:38 ?252次閱讀
    TurMass? 如何幫助解決 UWB 定位系統(tǒng)大規(guī)模終端標簽高<b class='flag-5'>并發(fā)</b>通信沖突問題?

    淺談儲能柜智慧能量管理平臺在多場景應(yīng)用的創(chuàng)新與實踐

    隨著能源需求的日益增長和新能源的快速發(fā)展,儲能技術(shù)在我國能源結(jié)構(gòu)調(diào)整的地位愈發(fā)顯著。智慧儲能柜作為新型儲能設(shè)備,其能量管理平臺的應(yīng)用廣泛,為我國能源產(chǎn)業(yè)帶來了**未有的機遇。本文將從智慧儲能柜能量管理平臺的應(yīng)用場景、創(chuàng)新技術(shù)及實踐
    的頭像 發(fā)表于 03-06 14:55 ?262次閱讀
    淺談儲能柜智慧能量管理平臺在多<b class='flag-5'>場景</b>應(yīng)用<b class='flag-5'>中</b>的創(chuàng)新與<b class='flag-5'>實踐</b>

    兆芯最佳實踐應(yīng)用場景解決方案發(fā)布

    《兆芯最佳實踐應(yīng)用場景解決方案》現(xiàn)已正式發(fā)布,掃描下方二維碼或點擊閱讀原文即可獲取下載。
    的頭像 發(fā)表于 01-13 14:45 ?433次閱讀

    創(chuàng)建唯一索引的SQL命令和技巧

    在創(chuàng)建唯一索引時,以下是一些SQL命令和技巧,可以幫助優(yōu)化性能: 使用合適的索引類型:對于需要保證唯一性的列,使用UNIQUE索引來避免重復(fù)數(shù)據(jù)的插入。 這可以確保列的值是唯一的,同
    的頭像 發(fā)表于 01-09 15:21 ?324次閱讀

    邊緣計算架構(gòu)設(shè)計最佳實踐

    邊緣計算架構(gòu)設(shè)計最佳實踐涉及多個方面,以下是一些關(guān)鍵要素和最佳實踐建議: 一、核心組件與架構(gòu)設(shè)計 邊緣設(shè)備與網(wǎng)關(guān) 邊緣設(shè)備 :包括各種嵌入式設(shè)備、傳感器、智能手機、智能攝像頭等,負責(zé)采集原始數(shù)據(jù)
    的頭像 發(fā)表于 10-24 14:17 ?884次閱讀

    計算平臺的最佳實踐

    計算平臺的最佳實踐涉及多個方面,以確保高效、安全、可擴展和成本優(yōu)化的云環(huán)境。以下是一些關(guān)鍵的最佳實踐: 一、云成本優(yōu)化 詳細分析云使用情況 :通過細致的監(jiān)控和分析,識別低ROI(投資回報率)的環(huán)節(jié)
    的頭像 發(fā)表于 10-24 09:17 ?598次閱讀

    本源量子榮獲2024金融科技場景應(yīng)用大賽“探索實踐獎”

    近期,在被譽為“中國金融改革發(fā)展風(fēng)向標”的2024金融街論壇年會上,本源量子與中國郵政儲蓄銀行股份有限公司聯(lián)合申報的“真實量子計算環(huán)境下,基于量子變分網(wǎng)絡(luò)的組合優(yōu)化方案”榮獲2024金融科技場景
    的頭像 發(fā)表于 10-23 08:05 ?576次閱讀
    本源量子榮獲2024金融科技<b class='flag-5'>場景</b>應(yīng)用大賽“探索<b class='flag-5'>實踐</b>獎”

    計算機控制系統(tǒng)實踐報告

    計算機控制技術(shù)實踐報告
    發(fā)表于 10-17 13:45 ?0次下載

    探索工業(yè)計算機的多元應(yīng)用場景

    于生產(chǎn)線監(jiān)控、數(shù)據(jù)采集、設(shè)備控制等多個場景。本文將探討工業(yè)計算機在不同領(lǐng)域中的多元應(yīng)用場景,分析其重要性及未來發(fā)展趨勢。一、制造業(yè)的應(yīng)用制造業(yè)是工業(yè)
    的頭像 發(fā)表于 10-08 15:14 ?504次閱讀
    探索工業(yè)<b class='flag-5'>計算</b>機的多元應(yīng)用<b class='flag-5'>場景</b>

    MATLAB的矩陣索引

    對矩陣進行索引是從矩陣中選擇或修改部分元素的一種方式。MATLAB 有幾種索引樣式,它們不僅功能強大、靈活,而且可讀性強、表現(xiàn)力強。矩陣是 MATLAB 用來組織和分析數(shù)據(jù)的一個核心組件,索引是以可理解的方式有效操作矩陣的關(guān)鍵。
    的頭像 發(fā)表于 09-05 09:28 ?870次閱讀
    MATLAB<b class='flag-5'>中</b>的矩陣<b class='flag-5'>索引</b>

    TRIZ在逆變器設(shè)計實踐應(yīng)用

    基于數(shù)百萬個專利案例的分析,提煉出一套系統(tǒng)化、結(jié)構(gòu)化的創(chuàng)新工具,幫助人們在面對復(fù)雜問題時,能夠迅速找到最優(yōu)解決方案。今天,就讓我們一起探索TRIZ在逆變器設(shè)計實踐應(yīng)用,見證科技如何重塑能源轉(zhuǎn)換的每一個細節(jié)。 1. 提升效率,
    的頭像 發(fā)表于 08-23 11:16 ?618次閱讀

    并發(fā)物聯(lián)網(wǎng)云平臺是什么

    并發(fā)物聯(lián)網(wǎng)云平臺是一種能夠處理大量設(shè)備同時連接并進行數(shù)據(jù)交換的云計算平臺。這種平臺通常被設(shè)計用來應(yīng)對來自數(shù)以萬計甚至數(shù)十億計的物聯(lián)網(wǎng)設(shè)備的并發(fā)請求,保證系統(tǒng)的穩(wěn)定性和響應(yīng)速度。 首先,從技術(shù)層面
    的頭像 發(fā)表于 08-13 13:50 ?445次閱讀

    ClickHouse內(nèi)幕(3)基于索引的查詢優(yōu)化

    ClickHouse索引采用唯一聚簇索引的方式,即Part內(nèi)數(shù)據(jù)按照order by keys有序,在整個查詢計劃,如果算子能夠有效利用輸入數(shù)據(jù)的有序性,對算子的執(zhí)行性能將有巨大的提升。本文討論
    的頭像 發(fā)表于 06-11 10:46 ?1235次閱讀
    ClickHouse內(nèi)幕(3)基于<b class='flag-5'>索引</b>的查詢優(yōu)化

    邊緣計算網(wǎng)關(guān)是什么?有什么應(yīng)用場景

    數(shù)據(jù)傳輸所需的時間,提高響應(yīng)速度,并減輕核心網(wǎng)絡(luò)和數(shù)據(jù)中心的負載。 邊緣計算網(wǎng)關(guān)的應(yīng)用場景很廣泛,主要包括以下幾個方面: 1. 工業(yè)物聯(lián)網(wǎng)(IIoT):在工業(yè)環(huán)境,邊緣計算網(wǎng)關(guān)可以用
    的頭像 發(fā)表于 06-05 13:54 ?949次閱讀
    邊緣<b class='flag-5'>計算</b>網(wǎng)關(guān)是什么?有什么應(yīng)用<b class='flag-5'>場景</b>