索引设计介绍
在我们广告系统中,为了我们能更快的拿到我们想要的广告数据,我们需要对广告数据添加类似于数据库 index 一样的索引结构,分两大类:正向索引
和倒排索引
。
正向索引
通过唯一键 / 主键生成与对象的映射关系。
比如,我们从数据库中查询数据的时候,根据数据主键 ID 查询当前记录,其实就是一个正向索引的过程。
根据这个描述,很明显,我们的正向索引适用于 推广计划
, 推广单元
和 创意
这几张表的数据上,因为广告检索的请求信息,不可能是请求具体的 计划
或推广单元
,它的检索请求一定是限制条件。
倒排索引
也叫
反向索引
,是一种检索方法
。它的设计是为了存储在全文检索下某个单词在一个文档货一组文档中存储位置
的映射,是在文件检索系统中最常用的数据结构。也就是我们提供具体的内容实例,根据内容来查询该内容所处的位置。
-
如何在广告系统中使用倒排索引?
核心用途是对各个维度 限制的
整理
。
如图中所示,我们希望找到西安市的所有的推广单元信息,那么我们只需要根据 陕西省 - 西安市
来进行索引,可以快速定位到所在的推广单元有 10,11
两个。
索引维护介绍
索引的维护最主要的是为了保证检索服务中的索引是完整的,我们在维护索引数据的时候,有两种场景会带来广告数据。在系统启动之初,会有一部分初始化数据,在系统上线运行之后,会逐渐有不少新的广告信息加入。因此,我们的广告索引类型整体可以分为两大类:
全量索引
检索系统在每次启动的时候,需要一次性读取当前数据库中的所有数据,建立索引。
TIPS:(这里有一个问题,如果我们系统流量高的时候,需要部署多实例,每一个实例在系统启动的时候,都直接从数据库中加载全量索引,会对数据库造成极大的压力。)
因此,通常我们实现全量索引都是通过读取文件中预先存储的广告数据来实现全量索引导入。
增量索引
顾名思义就是后来新增的数据索引。系统在运行过程中,会对数据库的变动进行监控,实现加载更新,构建索引,我们系统中通过对数据库表的 CRUD 操作的变动,通过监听 Binlog 来实现增量索引的更新。