廣告索引中為什么要級聯
這里的“級聯”一般指的是多層索引結構,也叫級聯索引(Cascade Index 或 Multi-level Index)。
在廣告系統的索引中,級聯設計有重要作用,主要原因如下:
1. 多維特征篩選的需求
廣告投放時,需要根據多種維度(比如地理位置、興趣標簽、用戶年齡段、預算等)來篩選和匹配廣告。單一維度的索引無法滿足復雜的場景,級聯索引可以高效支持多維度查詢。
示例:
第一層用地域作為索引,第二層用興趣標簽,第三層用性別等。
2. 性能優化
所有廣告信息直接查一遍,效率太低。通過層層過濾,每一級都快速排除掉大量無關項,極大提升查詢性能。
3. 空間效率提升
平鋪建立所有組合維度的索引會造成資源極大浪費。級聯索引允許只對現有組合建立有效路徑,節約內存和存儲。
4. 易于擴展和維護
新加維度或特征時,只需增加新的級聯層結構,不影響已有結構(比全量重建好很多)。
舉個例子
假如廣告索引包含三個條件:地域、性別、興趣,你可能用如下級聯結構:
索引根節點|-- 地域1|-- 性別1|-- 興趣1: 廣告集合A|-- 興趣2: 廣告集合B|-- 性別2...|-- 地域2...
當有用戶請求時,就可以根據條件,沿著“地域->性別->興趣”這個路徑層層過濾索引,快速定位可能匹配的廣告集合。
總結
級聯索引能:
- 支持多維度過濾匹配
- 提升查詢效率
- 節省存儲空間
- 便于系統擴展
這就是廣告索引中使用級聯的核心原因。
舉一個實際系統架構的例子
下面以美團的廣告流量檢索系統為例,介紹實際級聯索引系統的架構,并用圖文說明。
1. 美團廣告索引實際架構
美團廣告的投放檢索需要考慮多種條件,比如:
- 地域(city)
- 業務線(business)
- 關鍵詞(keyword)
- 廣告主(user)
- 興趣人群(tag)
等等。
假設一個常見的篩選順序是:地域 → 業務線 → 關鍵詞 → tag。
1.1 級聯索引的數據結構
通常會構建如下多層索引:
root||-- 區域1| |-- 業務線A| |-- 關鍵詞X| |-- tag-興趣人群a: [廣告id1, 廣告id2]| |-- tag-興趣人群b: [廣告id3]| |-- 關鍵詞Y ...| |-- 業務線B ...|-- 區域2 ...
在美團的廣告系統中,真實的索引還可能會和倒排索引、Bitmap、Trie樹等混合使用,以提高性能。
1.2 實際檢索流程
假設用戶A來自北京、使用美團外賣業務,搜索“漢堡”,歸屬于“美食達人”標簽。
檢索大致流程為:
- 根據地域“北京”在一級索引過濾。
- 進入業務線“外賣”對應的二級索引。
- 根據“漢堡”做倒排篩選。
- 進入“美食達人”標簽,獲得匹配的廣告id集合。
這樣相比對所有廣告過濾,性能提升非常大,可以做到毫秒級檢索。
1.3 為什么要這樣設計?
- 多條件組合檢索極快:每一層都以哈希/倒排等方式組織。
- 節約內存,只索引實際存在的廣告組合。
- 支持維度擴展,比如新增“節假日活動”這類特征,只需擴展一層結構。
- 高QPS 支撐:大量在線廣告請求,每秒數千上萬次訪問,層級索引大大減少單請求處理量。
2. 其它公司類似實踐
滴滴、阿里巴巴推薦系統 都在廣告與推薦索引中采用類似級聯或多級倒排結構。區別在于具體維度和數據規模不同。例如滴滴可能按城市、車型、時間分級,物流廣告按路線、倉庫、時效分級。
3. 技術細節補充
- 鍵空間爆炸控制:一般不會直接索引所有維度笛卡爾積,而是僅對實際有數據的路徑建索引。
- 冷熱索引分離:對高頻區域、業務、關鍵詞進行內存索引,低頻落磁盤。
- 增量更新:支持廣告上下線、預算變化時,動態地局部更新級聯結構。
總結
實際廣告檢索系統大量采納多層/級聯索引結構,以匹配高維實時查詢、高速檢索、降本增效等需求。美團、滴滴等公司都用類似思路。