超大规模检索中的索引设计
一 问题背景 1.1 业务背景 精准广告场景中,人群定向的常用方法是:根据各种不同的规则,将每一个用户(User)打上丰富的标签。与此同时,广告主(Member)在根据规则圈选投放人群时,系统也会将广告(Ad)打上各种的标签。当一个Ad和一个User被打上同一个标签(Tag)时,就表示该Ad圈定了这个User,即该Ad会参与对该User的展现竞价。 本次优化的难点出现在一个特定业务场景下,我们需要明确的知道一个Ad圈选了哪些User,而我们唯一知道的就是这个Ad被打上的一组Tag(Tag List)。此时,我们需要一个存储 + 索引的技术产品,让我们能够快速地通过Tag查询到每个Tag下挂载的所有User(User List)的id。此外,由于广告业务对实时性要求很高,系统还要保证User的实时行为能够快速在投放系统中生效,当一个User的某个行为导致该User身上被追加 或 删除某些Tag时,所有受到影响Tag下挂载的User List都会发生变化。 业务中的数据规模: User总数大约4亿 Tag总数约100w个 平均每个Tag下会挂载100w个User 平均每秒钟会对2000个tag进行查询 平均每秒钟会有5w个User会触发Tag更新,每次更新平均会更新10个Tag 可见,不管是存储规模、每秒检索结果的数据量 还是 每秒需要进行更新的数据量都非常庞大。这里需要特别说明的是