异构数据半小时实现搜索功能,一个系统搞定
在一次典型的搜索请求场景中,用户以“iPhone6S”进行搜索,在搜索结果中用户除了希望看到商品基本信息如标题、描述、图片等,还希望看到存储在扩展表中的sku、扩展标签等扩展信息,以及卖家的昵称、头像、信用等级等用户维度信息。如何实现在一次召回过程把分散存储在多张表中的与同一个商品相关的信息都返回呢?这就需要在dump过程中把多表数据按照一定的方式组织起来,拼装成最终希望的宽表格式,再写入持久化存储供引擎构建索引。 我们在dump过程中,把与此业务场景相关的多张表按照主键做merge和join。同一维度内的多张表按照主键拼成大宽表的过程成为merge,比如1)和2)之间就是按照商品id做merge,结果记为M1;3)和4)之间就是按照用户id做merge,结果记为M2。结果M1中有一列数据是卖家的用户id,而M2的主键就是用户id,将M1和M2根据用户id做join,就得到了最终的大宽表,宽表中的任何一条数据都包含了1)2)3)4)中的完整场景信息。 在通用搜索预留表构建过程中,我们已经按照dima_pk+ima_b_inner_mergekey和dimb_pk+dimb_b_inner_mergekey的方式做维度内merge,按照dima_pk+dimb_pk的方式做维度间join的方式完成了预留表与BuilderService的对接。只要业务同学把源表数据正确迁移到预留表中,就可以实现上面描述的复杂dump流程。数据迁移既要保证源表的全部数据被迁移,也要保证线上实时增量数据被迁移,而且迁移过程中需要根据元数据注册中心的字段映射信息进行转换,这个流程还是比较复杂的,如何自动化实现这部分工作呢? 我们的实现方式是基于阿里巴巴内部的中间件平台“精卫”做二次开发,编写自主消费tar包上传到精卫平台运行,根据各业务的注册信息完成适用于各业务的迁移任务,这部分工作由我们在开发通用搜索系统时完成,对各业务接入同学完全透明。 精卫平台支持全量迁移任务和增量迁移任务,简单的理解全量迁移任务就是循环对源表执行“select * from table_xxx where id>m and id比如一个业务开发同学需要为小区POI数据接入搜索能力,他在注册中心注册这个业务,在mapping_info中声明需要把源表的poi_id映射为dima_pk,把源表的poi_name映射为dima_a_text_r1,环境为预发环境。配置完成后,系统会自动分配一个biz_code如1001。当精卫任务启动时,我们上传到精卫的自主消费代码会把从源表拿到的poi_id为123123123的数据转换为主键为“1001_0_123123123”的数据写入通用搜索预留表,其中1001代表业务唯一识别码,0代表预发环境,123123123代表原始业务主键。 ![]() 如此一来就实现了用户只需一次填写,就自动化完成数据dump的工作。 4、在线查询服务 既然dump产出数据的字段是无语义的,那么相应的BuildService构建处端索引数据各字段也是无语义的。 (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |