广告检索内核设计

一 设计思路广告检索具有数据量较小、数据结构复杂、检索性能要求高、更新实时性要求高等特点。这要求设计者在进行内核整体设计时,需要做出倾向性的考量。本文介绍的检索内核在设计思路上的主要前提如下:纯内存存储对比于文档搜索动辄TB量级的数据量来说,广告场景的数据量一般在10GB至100GB量级。当前业界主流的资源划分方式均可以提供10G至100GB大小的内存,因此为了追求高性能,广告索引大都采用纯内存存储方案。本文设计的内核使用Linux提供的mmap进行文件映射,对索引文件进行类似于内存的直接操作,
摘要由CSDN通过智能技术生成

一 设计思路

广告检索具有数据量较小、数据结构复杂、检索性能要求高、更新实时性要求高等特点。这要求设计者在进行内核整体设计时,需要做出倾向性的考量。

本文介绍的检索内核在设计思路上的主要前提如下:

  • 纯内存存储

对比于文档搜索动辄TB量级的数据量来说,广告场景的数据量一般在10GB至100GB量级。当前业界主流的资源划分方式均可以提供10G至100GB大小的内存,因此为了追求高性能,广告索引大都采用纯内存存储方案。本文设计的内核使用Linux提供的mmap进行文件映射,对索引文件进行类似于内存的直接操作,目前并未对传统磁盘和SSD硬盘进行深入优化。

  • 数据schema + 标准化数据接入协议

为了提高检索内核的通用性,同时降低业务方的开发成本,内核提供了通用的数据schema描述方式和标准化的数据接入协议。业务方可以根据业务自行定义复杂的数据结构,包括元组类型数据(支持嵌套)和表间关联(支持多级关联)结构。

  • 无锁化并发读写

广告业务区别于搜索、推荐业务的另一大特征是有广告主行为的干预,如何及时响应广告主的各种操作是在广告系统设计初期就必须考虑的问题。为了同时保证读写的性能,业内通常利用轻量级原子操作实现无锁化并发读写。

  • 空间碎片管理

实时数据更新过程中会无法避免的出现空间碎片,随着更新行为的持续,碎片会导致存储空间利用率降低,直至危及服务稳定性。一些开源的检索技术选型(如LevelDB、RocketDB、ElasticSearch等)采用本地数据定期合并的方式来进行空间碎片回收。但是这种方式会带来两个问题:一是会不定期出现写放大,影响检索性能;二是

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值