广告索引中为什么要级联
这里的“级联”一般指的是多层索引结构,也叫级联索引(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. 技术细节补充
- 键空间爆炸控制:一般不会直接索引所有维度笛卡尔积,而是仅对实际有数据的路径建索引。
- 冷热索引分离:对高频区域、业务、关键词进行内存索引,低频落磁盘。
- 增量更新:支持广告上下线、预算变化时,动态地局部更新级联结构。
总结
实际广告检索系统大量采纳多层/级联索引结构,以匹配高维实时查询、高速检索、降本增效等需求。美团、滴滴等公司都用类似思路。