添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

一 设计思路

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

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

  • 纯内存存储

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

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

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

  • 无锁化并发读写

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

  • 空间碎片管理

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

本文介绍的内核通过两种方式的结合来解决空间碎片问题:一是在内核中实现了空间管理,通过复用的方式最大程度的减少空间碎片;二是通过定期切换全量数据的方式消除空间碎片。

  • 范式检索语义

为了进一步降低业务方的使用成本,内核还提供了范式检索语义,可以快捷的指定检索表、检索键,同时可以声明筛选条件。

  • Java/C++客户端

结合目前外卖广告业务发展现状、数据相关技术的生态、各语言特性以及团队成员技术栈分布,内核须提供Java和C++两种开发语言的客户端。

二 内核能力分层
为了内核代码 长期可维护 且 灵活可配置,在设计初期就对内核进行了清晰的分层定义。内核能力按照由底层向应用层的顺序分为如下几层:底层存储、空间管理、数据结构、数据表快照、数据表管理、检索语义。
在这里插入图片描述

  • 长期可维护

每一层都有自己的职责范围,并定义了调用接口,开发同学通过开发插件的形式提供具体的功能实现。高层通过调用并组装底层的基础能力,实现更复杂的逻辑。

  • 灵活可配置

每一层选用的具体插件支持通过配置接口暴露给业务方,这样业务方就可以通过配置的形式灵活选择每一层的具体实现插件。内核实现了配置解析器,除检索语义层外,其余各层的插件均可以通过配置文件自由选择。

2.1 底层存储

底层存储层管理数据与硬件存储设备之间的IO交互,负责对操作系统文件系统的读写操作。内核可在这一层实现对磁盘、SSD、AEP等存储介质的定制优化。

2.2 空间管理

空间管理层管理由于更新或删除产生的空间碎片,提高空间利用率。可以根据数据的实际使用场景选择适合的管理器,目前支持定长数据管理、变长数据线性管理和伙伴算法等管理方式。

2.3 数据结构

数据结构层实现了索引功能中使用的各种索引结构,并提供增删改查接口。常用的索引数据结构如Hash Table、顺序存储、B+树、跳表等。上层可以根据需要选择对应的数据结构。

2.4 数据表快照

数据表快照层主要实现了如下功能:

组织并管理多个数据结构,对外提供数据表维度的检索/更新接口。

支持表内分段,每一个分段内部单线程更新,各分段之间可并行更新。分段数量可通过配置文件进行配置。

目前数据表按照类型分为kv、kkv和structure(结构化表)三种。
在这里插入图片描述

2.5 数据表管理

数据表管理层实现了多表统一数据版本管理以及表间关联查询逻辑。

多个表共同构成了一个数据版本,数据表管理实现了表名到表的路由。

若在schema中定义Unit表存在外键poiId关联至Poi表,则可以直接通过检索出的Unit表doc查询对应Poi表中的数据。关联关系支持嵌套。

2.6 检索语义

检索语义层实现了范式条件筛选,方便业务方进行定制化规则过滤。

三 数据存储

3.1 组织形式

3.2 正排检索

  • 正排索引一级索引默认由一个Hash Table实现,数据分为doc数组区和变长数据区两个部分。

  • 检索时将主键hash为一个散列值,该值取模后做为偏移地址查询Hash Table,得到索引值。索引值即为doc在doc数组中的偏移位置。

通过偏移位置获取doc信息,doc中存放了所有定长字段。对于doc中变长字段,doc中存放8字节偏移地址,实际数据存放在偏移地址指向的变长数据区中。
在这里插入图片描述

3.3 倒排检索

倒排索引分为一级索引和二级索引,一级索引通过term检索倒排链入口地址,二级索引通过倒排链获取doc正排索引地址。一级索引默认由Hash Table实现,二级索引默认由顺序存储实现。
在这里插入图片描述

3.4 无锁并发读写

为了保证无锁并发读写,内核基于gcc编译器提供的原子操作进行数据写入,同时使用延迟释放技术确保读线程不会访问到失效地址。
在这里插入图片描述

3.5 数据整理

目前业界有两种主流的数据整理方案,具体如下:

  • 本地整理 + 热切换
    在这里插入图片描述

  • 离线整理 + 冷切换
    在这里插入图片描述

四 Java接口

为了适应更多的业务场景,方便与主流数据处理成熟技术选型结合,内核通过JNI的方式实现了Java客户端,透出了检索和更新所需的主要能力。

需要注意的是,由于JNI会引入额外的性能开销,在一些相对复杂的场景下,使用Java客户端可能会导致性能问题。

一 设计思路广告检索具有数据量较小、数据结构复杂、检索性能要求高、更新实时性要求高等特点。这要求设计者在进行内核整体设计时,需要做出倾向性的考量。本文介绍的检索内核在设计思路上的主要前提如下:纯内存存储对比于文档搜索动辄TB量级的数据量来说,广告场景的数据量一般在10GB至100GB量级。当前业界主流的资源划分方式均可以提供10G至100GB大小的内存,因此为了追求高性能,广告索引大都采用纯内存存储方案。本文设计的内核使用Linux提供的mmap进行文件映射,对索引文件进行类似于内存的直接操作,
这两年太卷了,毕设和毕业 答辩竞争激烈,越写越卷,没有创新和亮点的毕业答辩基本达不到老师的要求。 现在学长为你们准备了ASP.NET毕业 设计 项目,需要的自取哦。计算机毕业 设计 论文, 毕设论文,毕设练手好项目,ASP.NET 师电子化信息库的 设计 与实现 , 关注博客,持续更新系统项目,ASP.NET图像的 检索 技术毕业 设计 。这两年太卷了,毕设和毕业 答辩竞争激烈,越写越卷,没有创新和亮点的毕业答辩基本达不到老师的要求。 现在学长为你们准备了ASP.NET毕业 设计 项目,需要的自取哦。计算机毕业 设计 论文, 毕设论文,毕设练手好项目,ASP.NET 师电子化信息库的 设计 与实现 , 关注博客,持续更新系统项目,ASP.NET图像的 检索 技术毕业 设计 。这两年太卷了,毕设和毕业 答辩竞争激烈,越写越卷,没有创新和亮点的毕业答辩基本达不到老师的要求。 现在学长为你们准备了ASP.NET毕业 设计 项目,需要的自取哦。计算机毕业 设计 论文, 毕设论文,毕设练手好项目,ASP.NET 师电子化信息库的 设计 与实现 , 关注博客,持续更新系统项目,ASP.NET图像的 检索 技术毕业 设计 。这两年太卷了,毕设和毕业 答辩竞争
指纹识别技术在整个生物特征识别领域占据着重要地位,目前传统的指纹识别系统在指纹匹配准确度上也已经达到了比较理想的效果。然而,随着数据信息的膨胀,在很多应用场合下指纹数据库的规模越来越大,当系统需要处理大容量的指纹数据库时,如果采用传统的一对一的指纹识别模式,则将消耗相当长的时间。这对于实时性要求较强的应用系统而言,显然是不可接受的。为了提高大容量数据库下指纹识别的效率,一种基于指纹 检索 策略的快速搜索方案被提出,这一方案将有效降低整个指纹识别过程的耗时量。  此外,在嵌入式技术高速发展的今天,市场对于高度集成化、便携化、智能化的嵌入式指纹系统有着强烈的需求。考虑到嵌入式指纹系统需要进行现场指纹采
广告 系统中, 广告 活动创建时,运营人员通常会根据 广告 的受众情况,设置 广告 的基本定向,如香奈儿推广 需要投放上海的女士用户。 因此,根据定象条件对 广告 活动进行 索引 检索 是投放引擎的必备功能。 通常实现可以使用ElasticSearch这样的 索引 引擎。本文...
此博客用于个人学习,来源于网上,对知识点进行一个整理。 1. 广告 检索 服务功能的介绍: 前面针对我们的 广告 检索 服务,我们进行了全量 索引 和增量 索引 设计 与实现,接下来就是对于 广告 检索 系统的功能进行一个介绍。 广告 检索 服务是我们 广告 系统中最重要的功能,
1. 数据:数据是数据库中的储存对象,描述事物的符号记录称为数据,数据的含义称为数据的语义,数据与其语义是不可分的。 2. 数据库:数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合。数据库中的数据按照一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。 数据库具有可永久储存、有组织和可共享三个基本特点 3. 数据库管理系统:数据可管理系统位于用户与操作系统之间,和操作系统一样是计算机的基础软件,主要功能包括数据定义功能,数据组织、储存和管理,数据操纵
1.什么是nosql,not only sql。 nosql数据库是一种比较低级的数据库,关系型数据库是由nosql数据库发展而来。 什么是关系型数据库,这里不从概念上区别,常用的SqlServer,mysql,oracle都是关系型数据库。关系型数据库顾名思义,数据库关系明确严谨。 而nosql则是一种数据关系不严谨的数据库。一个key和value。 2.nosql与关系型数据库之间数据
关于数据库调优的知识点非常分散。不同的DBMS,不同的公司,不同的职位,不同的项目遇到的问题都不尽相同。这里我们分为三个章节进行细致讲解。 虽然SQL查询优化的技术有很多,但是大方向上完全可以分成物理查询优化和逻辑查询优化两大块: 物理查询优化是通过 索引 和表连接方式等技术来进
iGraph是搜索事业部工程团队打造的实时在线图存储与查询的系统,提供大规模图数据的存储、查询、更新和计算服务,目前承载了集团多个部门5000+表的数据,双11期间proxy入口峰值流量1106w qps、实时数据峰值更新506w qps,是名副其实的在线数据航空母舰。 在过去2年多的时间里面,iGraph架构经历了3次大的演进,分别是: (1)...
广告 检索 服务是我们 广告 检索 系统中最重要的服务功能,它能实现根据媒体方的请求信息返回对应的 广告 数据。我们比较常见的媒体方,比如地铁里面的通道大屏,手机的屏幕里打开的一些 APP,里面会展示一些 广告 ,这些 广告 载体就被称为媒体方。它们是用来播放这些 广告 创意的。媒体方会向我们的 检索 系统发起请求,这个请求实际上是非常复杂的,里面包含非常多详细的信息。首先,按细来分,可以将请求信息分为三个类型: 媒体方标识 mediaId:需要在我们的平台先定义,所以我们的平台通常有媒体方的标识。媒体方的标识就是告诉我们...
我们在2017年统一了搜索和推荐场景下的HA3、iGraph、RTP和DII四大引擎的存储层(参见统一之战),帮助它们取得了的更迅速的迁移能力、更快速的数据恢复能力和更丰富的数据召回能力。 最近一年来,我们在统一的存储框架上又做了进一步的演进,下面将分别从架构、Build服务以及存储模型角度介绍我们的新进展和思考。 在我们的传统架构(参...
Python信息 检索 课程 设计 旨在教授学生如何使用Python编程语言来进行信息 检索 和文本分析。课程 设计 包括以下主要内容: 1. Python基础:介绍Python编程语言的基本语法和常用库,使学生能够基于Python进行信息 检索 相关的编程工作。 2. 信息 检索 基础:讲解信息 检索 的基本原理和技术,包括倒排 索引 、布尔 检索 、向量空间模型等内容,以便学生理解信息 检索 的基本概念和方法。 3. 文本预处理:教授如何使用Python对文本数据进行预处理,包括分词、去除停用词、词干提取等操作,以便为后续的信息 检索 任务做好准备。 4. 检索 模型实现:介绍如何使用Python实现常见的信息 检索 模型,如BM25、TF-IDF等,使学生能够理解这些模型的原理并进行实际的编程实现。 5. 文本分析和挖掘:引导学生使用Python进行文本数据的分析和挖掘,包括文本分类、主题分析、情感分析等内容。 6. 项目实践:通过实际的信息 检索 项目案例,指导学生运用Python开展信息 检索 系统的 设计 与实现,培养学生的实践能力和解决问题的能力。 通过本课程的学习,学生将能够掌握Python编程语言在信息 检索 方面的应用,理解信息 检索 的基本原理和技术,并具备开发和实现信息 检索 系统的能力。这对于学生在信息 检索 、自然语言处理、数据分析等领域的职业发展都将具有重要意义。