国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

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

OSC開源社區 ? 來源:OSCHINA 社區 ? 2023-01-10 10:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景

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

樸素的解決方案

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

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

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

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

新的解決方案

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

算法詳細設計

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

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

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

2. 生成列的倒排索引對應位圖

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

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

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

將用戶請求中的入參作為 Key,查找符合條件的位圖,對每一列進行列內和空值做 || 運算,最后列間位圖做 & 運算,得到的結果是候選規則集,如下圖所示:

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

4. 從候選規則庫中,根據業務優先級排序,查找最優的規則

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

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

復雜度分析

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

工程問題 - 壓縮位圖

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

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

適用場景分析

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

其他優化方式

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

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

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 索引
    +關注

    關注

    0

    文章

    60

    瀏覽量

    10810
  • Redis
    +關注

    關注

    0

    文章

    392

    瀏覽量

    12185
  • 位圖
    +關注

    關注

    0

    文章

    6

    瀏覽量

    2473

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

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Go 語言高并發服務設計與性能調優實戰:從萬級到百萬并發的演進之路

    在2026年的今天,Go 語言已成為高并發后端服務的首選語言。根據 Stack Overflow 最新開發者調查: 指標 數據 Go 語言采用率 后端服務占比 42% 平均并發能力 單節點
    發表于 02-18 19:19

    一文說透了如何實現單片機的多任務并發

    在嵌入式系統開發,多任務并發是非常常見的,對于處理復雜的應用場景、提升系統的并發能力、提高系統的實時性等方面都有很大好處。在單片機實現多
    發表于 01-06 06:46

    桂花網M1000:輕量型藍牙網關的場景落地與客戶實踐

    特性直接決定了場景邊界: 連接能力:支持藍牙 4.x,無遮擋環境覆蓋 150 米,并發連接 20 臺設備,掃描范圍達上百臺,適配中低設備密度場景; 傳輸保障:4G Cat.1 與 Wi-Fi 雙模回傳
    發表于 11-12 16:59

    8784芯片點位圖資料

    電子發燒友網站提供《8784芯片點位圖資料.pdf》資料免費下載
    發表于 10-10 17:07 ?1次下載

    軟國際鴻蒙生態“應用+智慧場景”的創新實踐

    論壇上,軟國際智能物聯網業務集團解決方案經理方彬受邀出席,發表“鴻蒙重構全場景閱讀,開啟融媒體行業全新體驗”主題演講,以融媒體APP解決方案為例,分享軟國際鴻蒙生態“應用+智慧場景
    的頭像 發表于 09-03 17:01 ?1108次閱讀

    智慧農業新基建:邊緣計算網關在精準農業的落地實踐案例

    智慧農業新基建:邊緣計算網關在精準農業的落地實踐案例 傳統農業生產中,水肥管理依賴經驗判斷,往往造成資源浪費和產量不穩定;同時,惡劣的自然環境也給農業生產帶來諸多挑戰。而藍蜂邊緣計算
    的頭像 發表于 08-22 15:18 ?594次閱讀

    Nginx高并發優化方案

    作為一名在生產環境摸爬滾打多年的運維工程師,我見過太多因為Nginx配置不當導致的性能瓶頸。今天分享一套完整的Nginx高并發優化方案,幫助你的系統從10萬QPS突破到百萬級別。
    的頭像 發表于 08-13 15:51 ?997次閱讀

    軟國際全場景AI實踐

    近日,軟國際與華為云“同舟共濟”戰略合作8周年慶典暨“云智能行業賦能,全場景AI正當時”高峰論壇隆重舉行,會上軟國際副總裁、AI研究院院長萬如意博士發表了題為《軟國際全
    的頭像 發表于 07-24 16:32 ?1033次閱讀

    Linux網絡管理的關鍵技術和最佳實踐

    在大型互聯網企業,Linux網絡管理是運維工程師的核心技能之一。面對海量服務器、復雜網絡拓撲、高并發流量,運維人員需要掌握從基礎網絡配置到高級網絡優化的全套技術棧。本文將結合大廠實際場景,深入解析Linux網絡管理的關鍵技術和
    的頭像 發表于 07-09 09:53 ?947次閱讀

    第三屆大會回顧第3期 | FFRT并發框架在OpenHarmony的設計與實踐

    演講嘉賓 | 黃佑鐘 回顧整理 | 廖 ? 濤 排版校對 | 宋夕明 嘉賓介紹 開發框架分論壇? 黃佑鐘 ,海思Kirin解決方案并行與異構計算專家。 正文內容 多任務并發能更有效地利用CPU資源
    的頭像 發表于 06-21 16:53 ?1265次閱讀
    第三屆大會回顧第3期 | FFRT<b class='flag-5'>并發</b>框架在OpenHarmony<b class='flag-5'>中</b>的設計與<b class='flag-5'>實踐</b>

    鴻蒙5開發寶藏案例分享---應用并發設計

    ?** 鴻蒙并發編程實戰指南:解鎖ArkTS多線程黑科技** 嘿,開發者朋友們! 今天給大家扒一扒鴻蒙官方文檔里藏著的并發編程寶藏—— 100+實戰場景解決方案 !從金融理財到游戲開發,從折疊屏適配
    發表于 06-12 16:19

    手把手教你如何調優Linux網絡參數

    在高并發網絡服務場景,Linux內核的默認網絡參數往往無法滿足需求,導致性能瓶頸、連接超時甚至服務崩潰。本文基于真實案例分析,從參數解讀、問題診斷到優化實踐,手把手教你如何調優Lin
    的頭像 發表于 05-29 09:21 ?964次閱讀

    H110M-K點位圖

    H110M-K點位圖
    發表于 04-14 14:51 ?42次下載

    TurMass? 如何幫助解決 UWB 定位系統大規模終端標簽高并發通信沖突問題?

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

    淺談儲能柜智慧能量管理平臺在多場景應用的創新與實踐

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