国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

得物自研DSearch3.0搜索核心引擎升級之路

開發
DSearch引擎從開始的DSearch1.0的搜索引擎逐步經歷了DSearch2.0的分段式索引改造升級,又經歷了DSearch3.0的全圖化引擎升級。

一、背景

隨著交易和社區搜索業務穩步快跑,基建側引擎越來越復雜,之前搜索底層索引查詢結構已經存在較為嚴重的性能瓶頸。成本和運維難度越來越高。在開發效率上和引擎的穩定性上,也暴露出了很多需要解決的運維穩定性和開發效率短板。而在引擎的業務層部分也需要逐步升級,來解決當前引擎中召回層和業務層中各個模塊強耦合,難維護,迭代效率低下等問題。

圖片

二、引擎開發技術方案

DSearch1.0索引層整體結構

DSearch1.0的索引結構比較特殊一些,總體上使用了全局rcu的設計思想,整體架構上單寫多讀,所以實現了并發高性能無鎖讀,內部數據結構都是無鎖數據結構,所以查詢性能高。在寫操作上因為rcu機制實現寫入無鎖。整體上優點讀性能高,沒有傳統段合并操作帶來的磁盤抖動。缺點是索引地址和操作系統強相關,運維復雜,熱更新受限。全局地址分配難以并行寫入,構建瓶頸明顯。無法對浪費的內存進行回收導致內存空間利用率低,索引空間占用大。總體結構如圖所示:

圖片

DSearch2.0的索引升級

DSearch2.0分段索引整體設計

引擎2.0索引升級采用經典段合并架構,除了繼承了段合并中優異的高性能寫入性能和查詢已經索引合并等優勢外,針對段合并中頻繁的正排字段更新等帶來的高IO缺點。我們設計了新的正排字段原地更新索引,使新的DSearch2.0引擎擁有Redis的高性能寫入和查詢,也擁有lucene的緊湊索引和索引合并帶來的內存空間節省的優勢。

※ 索引段結構

  1. 每個索引段包含了文檔文件,用于緊湊存放document中的各個字段的詳細信息。字符串池文件是對document中所有的字符串進行統一順序存儲,同時對字符串進行ID化,每個字符串ID就是對應于字符串池中的offset偏移
  2. 可變數組文件是專門存放數組類型的數據,緊湊型連續存放,當字段更新的時候采用文件追加append進行寫。最終內存回收通過段之間的compaction進行。FST索引文件是專門存放document中全部字符串索引。每個fst的node節點存放了該字符串在字符串池中的偏移offset。而通過字符串的offset,能夠快速在倒排termoffset數組上二分查找定位到term的倒排鏈。
  3. 倒排文件是專門存放倒排docid,詞頻信息、位置信息等倒排信息,其中docid倒排鏈數據結構會根據生成段的時候計算docid和總doc數的密度來做具體判斷,如果密度高于一定閾值就會使用bitmap數據結構,如果小于一定閾值會使用array的數據結構
  4. 標記刪除delete鏈主要是用于記錄段中被刪除的document,刪除操作是軟刪除,在最后查詢邏輯操作的時候進行最后的過濾。
  5. 實時增量的trie樹結構,實時增量段中的前綴檢索和靜態段中的前綴檢索數據結構不一樣,trie因為能夠進行實時更新所以在內存中使用trie樹。
  6. 段中的metadata文件,metadata文件是記錄每個段中的核心數據的地方,主要記錄段內doc數量,段內delete文檔比例,實時段的metadata會記錄kafka的offset等核心數據。

圖片

Document文檔和索引結構

※ Document文檔數據結構

  1. Document文檔使用緊湊型存儲,其中array和字符串類型單獨存放,其他字段連續存放,string和array字段存放。
  2. array字段類型數據直接存放在可變數組文件區,連續追加寫。
  3. string字符串池對所有字符串進行連續存放,多個doc中同一個字符串引用同一個字符串地址,節省大量字符串存放空間。

※ 倒排索引文件結構

  1. 倒排索引文件存放docid倒排和Tf以及位置position數據。其中內存實時段中的倒排索引數據結構是固定一種類型array類型。而內存實時段固化為靜態段的時候,倒排數據結構會根據docid中的密度進行選擇array和bitmap存儲。當docid密度大于一定閾值是bitmap,反之是array結構。
  2. Tf數據結構是一個uint16的數組,數組長度和docid的數組長度一致,所以當確定了某個docid時候,也隨即確定了它的tf信息。
  3. postion信息存儲是一個二維數組的格式,第一層數組存放的是對應于term的在字符串池的offset,因為term在字符串池中已經ID化,所以offset可以表示唯一term。第二層數組是該term在字段中多次出現的位置,使用uint16存儲。

※ 前綴檢索文件

  1. FST靜態段文件
    a. 靜態段中前綴是fst的數據結構,因為fst一旦建立是不能夠進行修改的,所以在段合并的時候需要對所有term進行排序然后再構建fst結構。
    b. fst的node節點存放了對應于term的字符串池的offset。當需要查詢一個term的倒排結構時候,需要先查詢該term的字符串池的offset,然后拿該offset去倒排的termoffset文件中二分查找找到對應的倒排positionlist結構拿到對應倒排。所以一次term到倒排的查詢需要查詢一次fst+一次二分查詢。
    c. term到倒排的查詢一次fst+一次二分查找效率不高,所以針對term到倒排查詢,新增了第二種HashMap索引,直接通過term到倒排的offset索引,這個選項在建表的時候可以配置。
  2. 實時段RcuTrie樹索引
    a. 實時段中需要支持邊寫邊讀,前綴檢索需要支持并發讀寫。引擎中trie樹是rcu實現,單線程更新,多線程并發讀,trie樹寫更新節點內存延遲回收。

圖片

倒排索引和查詢樹邏輯

※ 倒排鏈優化

  1. DSearch1.0的roaringbimap倒排索引在低密度數據量上存在一些瓶頸,比如對于倒排鏈比較短的情況下,roaringbitmap的container大部分都是array結構,在倒排鏈查詢和合并都會進行一次二分查找,在大面積的倒排鏈合并中是個相當大的性能瓶頸。
  2. 針對上面所說的情況對roaringbitmap進行了精簡,只存array或者bitmap合并的時候不需要查找,直接鏈式合并。

※ 邏輯樹合并優化

  1. DSearch2.0重點從邏輯語法樹和倒排入手,優化語法樹,減少合并樹高,從二叉樹合并變成單層合并。
  2. 優化倒排鏈合并方式,采用原地倒排鏈合并,消除倒排合并臨時對象,同時引入多線程并行合并,減少長尾提高性能。

圖片

增量更新邏輯

※ 增量實時寫入邏輯

  1. 引擎支持多個并發實時段,這個由配置文件通過配置來進行配置。多個實時段能夠提升并發寫入的性能。
  2. 每個實時段對應一個寫入隊列,提高并發寫入吞吐。
  3. 每個段真實寫入一條信息會同步原子更新消費的kafka的offset,用于對后面進程重啟等恢復數據做準備。
  4. 當進程重啟或者異常退出時候,會讀取metadata文件中的最后一條kafka offset進行重新消費增量在內存中重新構建新的正排、文檔和倒排等信息,完成數據的恢復。

圖片

實時段固化和段合并策略

※ 實時段固化邏輯:

  1. 當實時段內隨著增量寫,doc文件大小超過128M時候會進行內存實時段固化操作。
  2. 固化操作開始時,會先生成新的內存實時段,老的內存實時段會變成只讀內存段。
  3. 遍歷按整個只讀內存段,構建新的索引和新的正排結構生成新的靜態段。

※ 段合并策略:

  1. 實時段固化的小靜態段因為大小比較小,會優先和之前固化后的小段進行合并,按照1,2,4,8進行合并,逐步合并成靜態段最大的上限。
  2. 靜態段的合并觸發策略是當靜態段中delete的doc比例超過了30%會觸發靜態段之間的合并,合并會按照近鄰合并原則,從左右近鄰中選取一個最小doc數的段進行合并,進而新生成一個新的段。

圖片

查詢和更新中的并發控制

※ 查詢流程

引擎查詢時候,先遍歷查詢實時段,然后再查詢靜態段。實時段查詢存在最大增量查詢截斷,當實時段查詢到最大增量截斷時實時段停止查詢。

實時段查詢后,查詢靜態段。靜態段中包含了全量構建索引的全量最大offset記錄同時全量的doc是通過質量分進行排序,所以在全量段查詢的時候,先遍歷質量分最大的全量段,逐步往后面靜態段查詢,直到查詢到全量截斷。

實時段查詢和靜態段查詢結果進行merge作為最終的查詢結果。

※ 更新并發控制

因為DSearch2.0的索引更新是直接在實時段或者靜態段進行更新,所以存在多線程讀寫問題。尤其是正排字段更新寫入量大更新頻繁。同時更新涉及到所有的實時段和靜態段,較為復雜。

為了解決正排字段和倒排的更新問題,新版本引擎引入了document文檔鎖池,對每個doc進行hash計算落到鎖池中具體一個鎖上來減少鎖沖突,當前鎖池內有多個個文檔鎖。文檔鎖在文檔進行拷貝和更新的時候會進行鎖住。

DSearch3.0搜索核心升級

異步非阻塞圖調度框架

圖片

※ 引擎主要改造:

  1. 圖框架支持RPC異步非阻塞請求:引擎圖框架RpcServer服務使用brpc的異步處理無需同步阻塞等待調度完成,只需框架調度完算子返回結果,不阻塞RpcServer線程,例如:當前引擎調用neuron服務是同步調用,當neuron服務負載高阻塞時,同步調用會導致拖住引擎RpcServer處理線程,新的異步非阻塞模式引擎client在調用引擎后已經返回,等待引擎RpcServer中異步調度框架中remote異步算子回調,減少外部服務影響引擎。
  2. 減少線程切換:圖框架調度器會優先調度當前運行線程,同時使用M:N類型的bthread線程池,線程切換會更小,執行效率高。
  3. RPC服務和框架算子獨立:引擎RPC服務和框架算子完全解耦,跨集群部署算子服務無需任何改造,實現算子脫離運行環境。
  4. 高效的算子異常處理和超時機制:每個算子維護自己的運行超時時間和請求到算子調度執行的超時時間,對整個請求流程中各算子執行更加精準。 
  5. 動態圖支持:圖框架支持靜態圖和動態圖業務組合式調用。支持靜態子圖和動態子圖調用等復雜業務組合。
  6. 復雜子圖支持:圖框架支持嵌套子圖,支持自調用模型,可以實現復雜單節點多功能調用。

算子間數據交換Table設計

圖片

※ 引擎主要改造:

  1. 列式數據共享優化:算子交換數據全部存放在Table列中,Table中全部共享列式數據,省去大面積數據拷貝,大幅提升引擎業務執行性能。
  2. 兼容引擎索引中doc數據:引擎索引中doc行式存儲有很多優點,比如多字段訪問效率高等,Table設計中考慮了行式存儲優點,不僅存高頻的列字段也儲存了引擎內部的doc*以及對應FieldDef*,能直接方便訪問索引數據,接口統一,易于迭代。
  3. 打通FlatBuffer序列化協議:當前引擎FlatBuffer序列化傳輸協議和引擎內部數據出口需要多次遍歷轉換,需要拷貝很多數據,新Table的設計內部數據列和FlatBuffer內部的數據列互轉互通,節省大量內部拷貝同時避免了字段兼容等問題。
  4. 支持原地排序和標記刪除:Table數據表,支持原地sort操作和標記刪除操作,節省數據排序時大量數據的拷貝和刪除操作中導致的數據重排等拷貝操作,提升性能。

算子間數據交換Table設計

圖片

※ 引擎主要改造:

  1.  動態圖支持:DSsearch3.0支持動態圖編排,主要通過業務方通過動態編排請求來組織對應的算子編排邏輯,實現業務方自主編排調度邏輯,方便整體業務開發。
  2. Remote遠程調用支持:通過開發遠程異步調用算子,支持DSearch3.0跨集群調用,實現多機算子化互聯互通。提高引擎的整體縱向拓展能力。
  3. 引擎算子庫復用:通過設計統一的算子接口,開發基礎的可復用框架算子,支持配置化組合運行圖,實現業務邏輯快速復用和開發,提高整體引擎開發效率。

三、性能和效果提升

DSearch在2024年Q1季度索引升級開發完成后逐步推全到交易和社區等各個主場景業務中,最后拿到了很多超預期結果:

索引內存優化超出預期:社區搜索和交易搜索總索引單分片優化60%。

構建和寫入性能優化超出預期:社區搜索和交易搜索主表寫入性能提升10倍。

索引更新優化超預期:社區和交易主表更新時間提升接近10倍。

性能優化符合預期:社區搜索平均rt降低一倍,P99晚高峰降低2倍。

四、總結

DSearch引擎從開始的DSearch1.0的搜索引擎逐步經歷了DSearch2.0的分段式索引改造升級,又經歷了DSearch3.0的全圖化引擎升級。逐步將DSearch引擎升級到業界較為領先的支持內存型、磁盤型多段式搜索引擎,為支持得物業務的發展做出了重要的貢獻,后續DSearch會圍繞著通用化、自迭代、高性能等多個方向繼續升級,將DSearch引擎迭代到業界領先的引擎。

責任編輯:龐桂玉 來源: 得物技術
相關推薦

2025-04-17 04:00:00

2023-08-09 20:43:32

2025-09-04 01:21:00

2022-09-30 15:15:03

OpusRTC 領域音頻編碼器

2025-11-11 01:55:00

2017-07-14 15:12:27

核心引擎架構

2025-09-04 09:15:00

2022-11-23 18:39:06

智能質檢

2023-08-21 19:37:21

得物DGraph引擎

2020-05-25 15:15:39

華為禁令開發

2024-04-08 13:47:21

騰訊云存儲云存儲AIGC

2024-03-05 18:36:21

轉換引擎用戶體驗

2022-11-18 12:06:48

App接口搜索

2025-05-29 03:11:00

2023-08-23 14:53:05

火山引擎視頻云視頻編解碼

2019-03-28 11:19:36

存儲

2025-04-08 02:30:00

2022-02-24 00:07:22

Shodan網絡搜索

2023-05-12 18:42:13

得物AI平臺
點贊
收藏

51CTO技術棧公眾號

亚洲一区二区国产| 色综合小说天天综合网| 精品视频黄色| 日韩在线免费视频| www.综合| 精品日本一线二线三线不卡| 天堂在线免费av| 亚洲女爱视频在线| 国产高潮免费视频| 久久久久久久精| 成年人午夜视频在线观看| 激情伊人五月天久久综合| 欧洲精品码一区二区三区免费看| 久久精品国内一区二区三区水蜜桃| 4438全国成人免费| 久久综合社区| 91精品国产91久久久久| 91精品国产自产在线丝袜啪| 久久综合亚洲社区| 国产不卡精品| 欧美精品电影免费在线观看| 国产一区二区av在线| 自拍偷拍亚洲在线| 欧美另类激情| 欧美成人精品影院| 91精品短视频| 日韩美女免费线视频| 色综合中文网| 国产精品视频一区二区三区四| av中文字幕一区二区| 国产精品视频精品| 午夜国产精品视频免费体验区| 91在线网站视频| 亚洲天堂黄色| 欧美在线日韩精品| 国产高清久久久| 老司机午夜av| 一区二区三区不卡视频在线观看 | 国产精品一区在线观看| 一本到12不卡视频在线dvd| 91久久久久久久久久| 一区二区三区毛片免费| 国内精品二区| 国产一区二区女| 欧美性猛交久久久乱大交小说| 中日韩免费视频中文字幕| 全部孕妇毛片丰满孕妇孕交| 精品欧美aⅴ在线网站| 五月香视频在线观看| 亚洲国产精品久久久久| www.久久99| 国产欧美va欧美va香蕉在线| 极品裸体白嫩激情啪啪国产精品| 久久av一区二区| 粉嫩在线一区二区三区视频| 成人在线播放网站| 在线观看亚洲精品视频| 亚洲人成在线网站| 午夜精品一区二区三区视频免费看| 妖精视频一区二区三区| 亚洲最大av在线| 久久亚洲视频| 成人在线免费观看av| 亚洲高清在线精品| av资源在线| 国产成人一区二| 久久国产成人| jizz18女人| 欧美日韩aaaaaa| 日本一区二区乱| 亚洲一区二区三区四区在线播放 | 日本精品免费观看| 免费美女久久99| 2019中文字幕视频| 亚洲成人免费网站| 久久成人av| 中文字幕精品在线播放| 亚洲已满18点击进入久久| 欧洲一区精品| 成人春色激情网| 99久久99久久精品免费观看| 番号集在线观看| 久久久久久久久久久成人| 日日夜夜精品视频天天综合网| www.涩涩涩| 国产视频欧美视频| 亚洲午夜精品一区 二区 三区| 国产美女在线一区| 这里是久久伊人| 国产在线日韩精品| 日本午夜激情视频| 欧美大片在线观看一区二区| 成人短片线上看| 免费男同深夜夜行网站 | 日韩av一级片| 四虎最新地址发布| 国产亚洲a∨片在线观看| 欧美特黄一级| 91中文字幕网| 久久精品成人欧美大片| 亚洲综合二区| 亚洲一本大道| 久久亚洲精品视频| 国产一区二区三区综合| 男女啪啪在线观看| 亚洲a在线观看| 亚洲欧美日韩综合aⅴ视频| 久久精品嫩草影院| 久久成年人免费电影| 亚洲18色成人| 欧美成人一区在线观看| 麻豆导航在线观看| 欧美片一区二区三区| 国产毛片精品视频| 丁香花高清在线观看完整版| 91精品在线影院| 亚洲免费三区一区二区| 亚洲国产欧美国产第一区| 欧美aaa在线观看| 欧美一区二区视频在线观看2020| 99久久www免费| 在线免费视频你懂得| 日本久久久久久久久| 国产精品久99| 人妖一区二区三区| 草草久视频在线观看电影资源| 免费99精品国产自在在线| 99久久国产免费看| 精品一区二区三区视频在线播放| 91免费国产精品| 国产一区二区三区日韩欧美| 韩国三级电影一区二区| 91破解版在线观看| 黄色网zhan| 亚洲一级片在线看| 久久这里只有精品6| 日韩精品一级| 99ri国产在线| 国产精品久久一| 精品高清美女精品国产区| 一级欧洲+日本+国产| 欧美日韩视频精品二区| 成人欧美一区二区| 日韩免费看网站| 国产乱子伦一区二区三区国色天香| 成人一区福利| 日韩a∨精品日韩在线观看| 欧美成人网在线| 亚洲男同性恋视频| 国产一区二区三区四区三区四| 日本欧美在线视频免费观看| 精品国产综合区久久久久久| 91精品国产高清一区二区三区| 青椒成人免费视频| 狠狠久久综合| 黑粗硬长欧美在线视频免费的| 国产一区二区丝袜| 日韩三级在线免费观看| 国产精品一品二品| 久久超级碰碰| 福利在线午夜| 男人j进女人j| 久久久欧美一区二区| 亚洲aⅴ怡春院| 日韩一区精品字幕| 自拍偷拍亚洲| 天天射综合网站| 视频二区一区| 久久久久久久国产| 欧美日韩中文字幕在线视频| 日韩电影在线观看电影| 国产不卡精品在线| 欧美亚洲日本| 国产欧美精品aaaaaa片| 2019中文字幕在线免费观看| 欧美亚洲综合久久| 91尤物视频在线观看| 久久精品久久久| 原纱央莉成人av片| 激情综合色综合啪啪开心| 尤物99国产成人精品视频| 中文字幕不卡在线| 欧美午夜一区| 青青伊人久久| 国产高清在线看| av网站在线观看不卡| 成人欧美一区二区三区在线| 亚洲国产精品资源| 中文字幕在线不卡视频| 久久国产精品亚洲77777| 超碰97久久国产精品牛牛| 精品福利视频导航大全| 国产一区二区四区| 国产精品自拍偷拍| 中文字幕在线亚洲| 91精品国产福利在线观看| 亚洲欧洲精品一区二区三区不卡| 免费在线看成人av| 欧美好骚综合网| www一区二区三区|