高性能通用检索系统设计实现

问题背景

这里介绍的是一种高性能检索系统内部核心的索引实现原理,该检索系统承载我们业务场景中非常核心的商品检索功能,在少于100检索条件下可以做到30ms以内的实时响应,这里,我们主要详解介绍其中的内部技术实现,这些技术实现在一些其他场景下也具备一定的通用性,这篇文章会仅仅从技术的角度出发分析问题的背景和解决方案,希望为大家在后续的工作中为解决类似的问题提供一种成熟稳定的解决方案的参考。

我们面对的问题场景是有数千万的商品id,有数十万种检索条件,满足不同检索条件有不同的一批商品id,各种检索条件可以混合检索,线上业务通常条件下会有数十种检索条件,要求在30ms以内获得检索结果。

设计实现

针对上述的问题场景,不考虑业务逻辑,单从技术层面分析,我们的解决方案是对所有商品id构建一个全量的vector列表,然后对每种检索条件构建一个位图索引bitmap,bitmap的每一个bit与商品全量vector的下标进行映射。每种检索条件的检索结果都是预先构建好的,对不同的检索条件进行运算后得到一个对应最终检索结果的bitmap,从该bitmap可以映射得到对应实际检索结果的商品id列表。
如下图所示:

上面的方案还存在一个比较严重的问题,由于bitmap构建时的base vector是全量商品id列表,这个列表元素个数是数千万级别,而bitmap有数十万根,每一根bitmap如果按原样存储,则仅bitmap的内存占用就至少需要100G+,对内存的需求太大,这里的bitmap是非常稀疏的,我们完全可以对bitmap进行压缩存储。

bitmap压缩的设计实现如下:

猜你喜欢

转载自blog.csdn.net/shangshengshi/article/details/78347220