焦点日报:京东APP百亿级商品与车关系数据检索实践
2023-05-08 10:29:04 来源:博客园
导读

本文主要讲解了京东百亿级商品车型适配数据存储结构设计以及怎样实现适配接口的高性能查询。通过京东百亿级数据缓存架构设计实践案例,简单剖析了jimdb的位图(bitmap)函数和lua脚本应用在高性能场景。希望通过本文,读者可以对缓存的内部结构知识有一定了解,并且能够以最小的内存使用代价将位图(bitmap)灵活应用到各个高性能实际场景。

1.背景

整个汽车行业行特殊性,对于零配件有一个很强的对口特性,不同车使用的零配件(例如:轮胎、机油、三滤、雨刮、火花塞等)规格型号不一样。在售卖汽车零配件的时候,不能像3C家电、服饰,需要结合用户具体车辆信息,推荐适合的配件商品。基于此原因,京东自建人车档案模型并且利用算法清洗出百亿级的车型-零配件的适配关系数据,最终形成“人->车-〉货”关系链路,解决“人不识货”的问题。 具体使用场景如下图:

.


(资料图)

图1.1京东商详推荐商品图1.2京东加购弹窗推荐商品

2.数据模型

人-> 车->货”关系的核心链路是由人(京东用户)、乘用车和SKU这三部分组成。

首先,用户在京东APP的商搜页、商详页多个位置都可以选择自己的车型信息进行绑定(例如:图2.1,京东商详绑车入口位置“+添加爱车”按钮),建立“人车档案”数据。

.

图2.1.京东商详绑车入口位置图2.2.京东商搜绑车入口位置

其次,运营在后台管理系统中将商品与车型进行绑定,建立“商品与车型关系”数据(商品与车型的关系数据量级在百亿级别)。

最终,购买商品的时候,京东推荐系统可以通过用户自己绑定的车型推荐出适合该车型的商品。具体商品适配车型数据模型,见图2.3

图2.3京东商品适配车型数据模型

3.缓存结构设计

基于前面两个部分的介绍,我们可以了解到整个商品搜索适配推荐存在两个最核心问题。第一、百亿级商品适配车型数据的存储结构设计,尽可能的占用资源成本最小;第二、商详通过用户车型来搜索适配商品时,必须保证接口性能的TP99位于毫秒级。最终技术选型的时候,采用了jimdb的位图(bitmap)函数来进行数据存储。

3.1位图(bitmap)结构

位图(bitmap)是通过最小的单位bit来进行0或者1的设置,表示某个元素对应的值或者状态。一个bit的值是0或者1;也就是说一个bit能存储的最多信息是2。

• 位(bit):计算机内部数据存储的最小单位,例如:11001100是一个八位二进制数。

• 字节(byte):计算机中数据处理的基本单位,习惯上用大写B来表示,1B(byte,字节)=8bit。

图3.1位图(bitmap)内部结构

3.2位图(bitmap)数据写流程

位图(bitmap)是基于jimdb的SDS(简单动态字符串)类型的一系列位操作,遵循jimdb的SDS特性,例如:位图(bitmap)最大长度512M,最大可以存储232位。以下是“big”字符串的SDS结构示例:

图3.2.1“big”字符串的SDS结构

SDS(简单动态字符串)为了保证性能采用了空间预分配的策略:空间预分配用于优化SDS的字符串增长操作。SDS的API对一个SDS进行修改并且需要对SDS进行空间扩展的时候,程序不仅会为SDS分配修改所必须要的空间,还会为SDS分配额外的未使用空。具体预分配流程图如下:

图3.2.2SDS预分配流程图

位置1:创建SDS简单字符串预分配空间为:偏移量/8+1。

位置2:剩余空间不足时,预分配空间流程。

3.3压缩商品与车关系缓存
偏移量(自增ID)全量车型商品SKU
11165788101362
21165793101362

商品适配车型关系(百亿级数据量)

商品与车关系缓存存储过程中,采用了商品SKU作为KEY,全量车型ID的偏移量(采用偏移量是为降低内存消耗)作为VALUE值来进行存储。

全量车型ID大约有几十万的数据量,极限情况下一个商品SKU可以适配几十万辆车,很容易造成缓存大KEY的问题,为此我们进行了偏移量(全量车型ID对应的自增ID)的分段处理。具体是按照:SKU作为缓存KEY的基础上,追加一个分段标记数字作为新KEY,每个偏移量都会按照分段范围对应一个分段标记数字。例如:偏移量1~50000,对应缓存KEY为SKU+0;偏移量50001~100000,对应缓存KEY为SKU+1,其它偏移量以此类推,这样就保证了一个SKU即使适配所有车辆也不会出现缓存大KEY的情况。

BitMap缓存结构底层使用SDS简单字符串,为了保证性能采用了预分配空间的策略(图3.2.2,“缓存BitMap内部存储流程图”的“位置2”中虚线框圈选),这样在缓存商品与车关系的时候浪费了大量的缓存空间。为此我们调整了偏移量存储顺序,首先获取到需要缓存的车型内最大的偏移量,保证同一个缓存KEY第1次创建SDS简单字符串(图3.2.2,“缓存BitMap内部存储流程图”的“位置1”中虚线框圈选)后,不再进行第2次空间扩容,这样来最大限度的提升缓存利用率,起到压缩空间目的。缓存数据关系流程如下:

图3.3.1缓存数据关系流程

位置3:设置分段最大的偏移量,保证后续新增偏移量不再扩容空间。

位置4:设置分段较小的偏移量。

全量车型ID是定长7位的数字,如果用它作为偏移量将消耗内存巨大,所以采用对应自增ID作为偏移量。最终在bitmap缓存的商品SKU与车的适配关系缓存结构如下图:

3.3.2商品与车缓存结构图

位置5:spuId用{}括起来表示缓存路由(Lua脚本中同一次请求,数据必须在缓存同一个分片上,否则会丢失数据)。POP商品spuId是SKU的产品ID,自营商品spuId是SKU的MainSkuId。

备注:

1、自营商品MainSkuId可能发生变化,所以我们接入了商品变化MQ消息,实时调整SKU与车适配关系的存储位置。

2、京东商详页面中每个不同的规格/型号分别对应不同的SKU,但是它们都对应同一个SpuId或者MainSkuId。

4.缓存架构设计

商品与车的关系数据量每天都在不断增长,要求缓存架构设计,需要支持集群横向/纵向扩容和来满足业务发展以及高可用性。整个缓存架构体系主要有前端、京东养车商品与车关系层和存储三部分组成。

“商品与车关系缓存架构”层核心包括:1、“集群路由”层,实现了集群横向扩容,保证数据量增涨的时候,缓存容量也能跟上。2、“分片路由”层,保证搜索的底层数据的分片相同,避免数据丢失。

“存储”层核心包括:1、实现了缓存压缩,参见3.3压缩商品与车关系缓存。2、单元化实现跨区域灾备,保障大促系统稳定性。具体商品与车关系缓存架构如下:

4.1商品与车关系缓存架构图

位置6:集群路由,通过商品类型或者商品编号(POP商品)路由到不同缓存集群,便于横向扩展,每个集群单分片限制,解决分片超过限制问题。

位置7:分片路由,保障Lua脚本搜索数据的底层数据集群分片相同,避免数据丢失。其中自营商品和POP商品的路由分别是main_sku_id和product_id。

位置8:自营商品缓存集群,单元化实现跨区域灾备,采用自研DRC(Data Replication Center)数据同步机制。

位置9:POP商品缓存集群,通过商家编号拆分为两个子集群。

5.高性能搜索

基于BitMap(位图)缓存的商品与车关系数据,商详调用接口的内部实现采用了Lua脚本来降低网络开销,保障整个接口的性能。以下是搜索接口的流程图:

5.1商详搜索商品与车适配关系流程图

位置10:商详调用接口的时候,要传两个参数。第1个参数是全量车型ID列表,大约5个全量车型ID。第2个参数是商品SKU列表,SKU的数量极限超过200个。最后全量车型ID与商品SKU组合为上千个商品与车的关系后,再到百亿级适配关系去搜索看是否匹配的。如果不匹配返回适配商品,反之则返回不适配。

Lua脚本减少了应用服务器与缓存服务器的交互,降低了网络开销的时间,达到提升搜索服务的性能。以下是Lua脚本具体代码:

5.2商详搜索商品与车适配关系Lua代码

基于以上缓存设计和Lua脚本的使用,整个接口T999小于13ms。具体的接口性能监控如下图:

5.3商详搜索商品与车适配关系接口性能

6.总结

整个缓存结构设计的时候,使用BitMap(位图)来存储数据。解析SDS的内部存储流程,通过存储流程机制避开预分配空间节点,最大限度的利用缓存空间,避免资源浪费。采用Lua脚本来实现数据的适配搜索,降低网络开销,进一步提升接口的性能。希望此文对大家后续设计类似场景有一定的帮助和启发。

作者:京东零售 张强

内容来源:京东云开发者社区

焦点日报:京东APP百亿级商品与车关系数据检索实践

2023-05-08

氐族_氐

2023-05-08

何雄在调研畜牧产业发展工作时强调 强化创新引领 突出龙头带动为经济社会高质量发展夯实农业根基

2023-05-08

新概念英语第三册学习内容 (16)_焦点速看

2023-05-08

新华保险什么险种好?可靠吗?

2023-05-08

大数据透露餐饮出行电商全线走红

2023-05-08

当前时讯:扩需求稳增长!松江这个政策宣讲会持续开展

2023-05-08

你发现了吗?大多数人存款利息低,是因为没有选择存款方式!

2023-05-08

全球新动态:众安百万医疗险2023怎么样?多少钱?

2023-05-08

焦点关注:施华洛世奇水晶手链_关于施华洛世奇水晶手链介绍

2023-05-08

蔚为壮观和蔚为大观区别_蔚为壮观

2023-05-07

北京菜百黄金价格今天多少一克(2023年05月07日)|世界今日讯

2023-05-07

2023年螺钉概念利好哪些上市公司?(5月7日)

2023-05-07

关于诚信的论文800字高中_关于诚信的论文800字 今日视点

2023-05-07

谁知道锦心绣口是什么意思_谁知道锦心绣口的解释|全球热点评

2023-05-07

佳能1dx2拍飞版鸟技巧_佳能1dx2 环球讯息

2023-05-07

资讯:猕猴桃英语怎么说_猕猴桃的英语

2023-05-07

购房后公积金提取需要什么材料|环球观察

2023-05-07

福建龙岩新罗区四名干部暴雨夜落水失联 搜救进行中 热门看点

2023-05-07

天天观焦点:无机肥料是指什么肥料 无机肥

2023-05-07

环球微速讯:猪肉价格三连跌 服务消费需求回暖 一季度市区CPI温和运行

2023-05-07

环球头条:花粉最好平替!荣耀新机入网:百万跑分+两亿主摄

2023-05-07

祖坟立碑祭文范文_祖坟立碑留几代人名-当前热闻

2023-05-07

看热讯:CPA考证难度大不大?考哪些科目?

2023-05-07

花生脆糖作伴,93岁巴菲特+99岁芒格股东大会“精华”集萃

2023-05-07

国泰君安:货币政策渐趋稳健 5月流动性平稳偏宽

2023-05-07

凯立新材稀贵金属循环再利用基地项目在铜川签约

2023-05-07

酒店gop报表(酒店gop是什么意思)

2023-05-07

中介售楼员怎么干_中介售楼技巧-焦点简讯

2023-05-07

【世界快播报】用爱浇灌,开出心里的花——实验小学多措并举开展心理健康教育活动

2023-05-07

小学生经典诵读篇目40篇_小学生经典诵读100篇适合34年级 全球短讯

2023-05-07

动态:明天起你没有爸爸了,江苏女子的话,感动了无数网友

2023-05-07

虹猫蓝兔吧灵儿_虹猫蓝兔吧 全球即时看

2023-05-07

快报:倒库回半圈和一圈时机有什么区别_倒库回半圈和一圈时机

2023-05-07

多家银行宣布:下调!

2023-05-06

愚公移山神话小故事-愚公移山神话故事

2023-05-06

南方电网深圳供电局消除67条线路、237台配变重满载风险

2023-05-06

2023中国佛山饮品展交通指南(公交+地铁+自驾)

2023-05-06

山东省日照市市场监管局全力维护“五一”节日期间市场秩序 环球热文

2023-05-06

吉林碳纤维产业应用领域不断拓展 世界播资讯

2023-05-06

德国波鸿汽车论坛热议中德汽车产业合作 全球快消息

2023-05-06

每日快报!《保卫萝卜4》绿野奇缘第六十关怎么过

2023-05-06

世界快播:2023河北张家口高考报名人数公布 多少人参加高考

2023-05-06

奇游加速器最新兑换口令2023年5月|环球视讯

2023-05-06

快消息!国乒选手点外卖,陈梦备战世乒赛,确实要加强营养

2023-05-06

孟博登车|世界短讯

2023-05-06

老年保健与管理专业就业怎么样出来干什人好吗 今日快看

2023-05-06

环球观天下!浙江发布今年普通高校招生工作实施意见,语数外回归全国卷

2023-05-06

世界短讯!【西方文艺理论】丹纳,以历史学者视角论《艺术哲学》

2023-05-06

今热点:限定款小米 13 Ultra 开售,定价 6499 元

2023-05-06

毕滢再发声!被曝已有稳定新男友,和张丹峰真实关系曝光!

2023-05-06

河北省承德市2023-05-06 10:30发布大风蓝色预警

2023-05-06

每日精选:杨紫为张一山庆生:又是一年生日快乐 我们不变

2023-05-06

哈登14中3复刻本西一幕遭嘲讽!名嘴:给大帝帮助比劳力士更重要 天天最新

2023-05-06

每日报道:吕梁市科技局:聚力打造科技创新高地

2023-05-06

天天简讯:一季度辽宁科技型中小企业增长近四成

2023-05-06

央视现场直播!湖人勇士G3来袭,詹姆斯库里谁能赢下小天王山?

2023-05-06

“华龙一号”全球首堆示范工程通过竣工验收-当前快看

2023-05-06

安徽省蒙城、利辛这两个县将圆高铁梦

2023-05-06

票选|万物并秀!2023年立夏房企官宣海报大赏 焦点速看

2023-05-06

担心遭“报复性打击”?泽连斯基欧洲访问行踪飘忽,一路疯狂换飞机

2023-05-06

数控机床的坐标系采用的是什么坐标系(数控机床坐标系采用的是什么坐标系)

2023-05-06

当前动态:加密货币交易所币安将面临美国的调查,其涉嫌违反对俄罗斯的制裁

2023-05-06

美畅股份(300861):5月5日北向资金减持30.48万股|世界热消息

2023-05-06

环球今热点:意媒:丹布训练中出现轻微疲劳,为以防万一不会随队出战罗马

2023-05-06

当前快讯:卑恋本兮_卑恋

2023-05-05

智联招聘报告:47.5%的本科毕业生拿到offer 普通二本院校毕业生更难获offer 世界新消息

2023-05-05

天天速看:片仔癀:上调主导产品片仔癀锭剂价格

2023-05-05

起售价17.88万元 试驾年轻人的第一台跑车哪吒GT

2023-05-05

每日播报!未缴养老保险 单位可为离职员工补缴

2023-05-05

今日热搜:速看!事关小升初! 湖里区发布重要公告

2023-05-05

【环球播资讯】一季报披露敏感期买入股票,中超控股监事刘洪斌致歉

2023-05-05

5月1日起执行!上海实施多子女家庭住房公积金支持政策|信息

2023-05-05

天天观点:爱琴海集团:五一假期总客流同比增长97% 总销售突破3.8亿元

2023-05-05

复星医药:拟出资2.49亿元认购联合健康险9722万股新增股份

2023-05-05

焦点资讯:山东高中生火车站集结身高引热议 家长:男生平均身高1米8,女生1米7

2023-05-05

泌阳县郭集镇:“看客”变“主角” 全民参与人居环境整治 环球时讯

2023-05-05

【世界聚看点】苏丹快速支援部队宣布自5日起延长停火72小时

2023-05-05

猪价低位运行 国家研究启动年内第二批中央冻猪肉储备收储工作|环球最新

2023-05-05

谱青春华章 展税务风采 环球观热点

2023-05-05

汤姆叔淑在线入囗_天仙tv在线入囗

2023-05-05

【世界时快讯】博通CEO回避并购敏感点,承诺每年向VMware研发豪投20亿美元

2023-05-05

薇薇歌曲歌词_微微歌曲歌词

2023-05-05

诉讼离婚程序怎么走 诉讼

2023-05-05

环球速读:华钰矿业: 公司工作人员将尽快查收并处理您的邮件

2023-05-05

世界观点:嘟嘟囔囔的意思是什么_词语嘟嘟囔囔什么嘛意思

2023-05-05

无我原非你全诗_无我原非你 当前热点

2023-05-05

【全球播资讯】市桥汽车站到鹤山汽车站_市桥汽车站

2023-05-05

【环球播资讯】欧盟碳税新政只是让排放变得更加昂贵

2023-05-05

雷军怒赞!小米13 Ultra全新限量定制色成了-世界视讯

2023-05-05

全球消息!中超·前瞻|客战深圳队,沧州雄狮用好外援是关键

2023-05-05

马鞍山四措并举推动文旅产业高质量发展

2023-05-05

微速讯:新沂编制教师招聘报名时间+入口+流程2023

2023-05-05

种蓝莓的“新农人”|天天快资讯

2023-05-05

5月5日生意社混二甲苯基准价为7710.00元/吨

2023-05-05

环球热议:全球面临严重粮食不安全人口增至2.58亿

2023-05-05

环球微资讯!国有大行平均年涨幅逾20%,银行股大幅上涨背后意味着什么?

2023-05-05

天弘中证沪港深云计算产业ETF净值下跌2.62% 请保持关注

2023-05-05

巩固消费回升势头 推动投资平稳增长 政策合力扩需求 经济复苏动力强

2023-05-05

苹果CEO库克:苹果仍未考虑“大规模裁员”。

2023-05-05