- 短视频社区:产品、运营与商业化
- 张哲
- 852字
- 2025-02-27 04:38:41
3.4.2 既要快又要准的挑战
搜索系统面临的第二个主要问题是性能挑战,用户对于搜索系统的耐心是很缺乏的,在需要处理大量数据的前提下,既要求系统返回的结果准确,又要求系统返回结果的速度足够快。在前面搜索系统原理部分我们介绍过,整个搜索系统包含索引模块、排序模块、识别模块,从用户提交查询到将排序结果返回给用户,其实是一个相对比较复杂的过程。在网络正常的情况下要求系统延迟必须控制在毫秒级别,也就是说系统需要从千亿量级的短视频内容里找到可能的相关结果,还要进行排序,这就对性能提出了极高的挑战。
业界目前正努力从以下几点支持性能优化,缩短响应延时,提高查询速度。
(1)设计更优良的排序算法
搜索引擎的三大模块是索引模块、排序模块和识别模块,其性能瓶颈主要是在排序模块。索引模块可以在离线环境下构建完成,识别模块只是系统与用户的交互,排序模块才是优化空间最大的部分。最著名的排序算法是Google当年提出的PageRank算法(某个网页的重要性由有多少其他网页链接到该网页决定),但这里的排序算法优化不是指原理优化,而主要是指排序速度上的优化,以计算的空间复杂度替换时间复杂度,优化排序时间。
(2)优化索引表的设计
只对常用字段建立索引,选择性地放弃使用频率较低的字段,提高索引创建效率。建立索引时选择合适的字段大小,避免字段过大使索引树层级变多,节点变大,占用内存空间。只针对稳定的数据字段建立索引,更新频繁的数据字段不建立索引,索引本质上也需要数据库去维护的,频繁的数据更新字段会增加数据库的性能损耗。尽量使用索引组合,以增加查询的精准度,从而使得系统召回的数据量相对减少,提高索引的使用效率。
(3)在各个环节使用分布式方案
前面已经介绍过分布式索引。既然索引模块可以做成分布式的,那么同理,排序模块也可以做成分布式的。识别模块在处理用户输入时,将用户的众多查询分发到不同的计算节点;在处理系统输出时,汇总各个计算节点的处理结果。分布式方案某种程度上也是用空间换时间的方案,要注意的是需要协同好各个计算节点,否则容易造成汇总结果的重复计算或者丢失。