在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

京東APP百億級商品與車關系數據檢索實踐

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-10-18 14:14 ? 次閱讀

作者:京東零售 張強

導讀

本文主要講解了京東百億級商品車型適配數據存儲結構設計以及怎樣實現適配接口的高性能查詢。通過京東百億級數據緩存架構設計實踐案例,簡單剖析了jimdb的位圖(bitmap)函數和lua腳本應用在高性能場景。希望通過本文,讀者可以對緩存的內部結構知識有一定了解,并且能夠以最小的內存使用代價將位圖(bitmap)靈活應用到各個高性能實際場景。

1.背景

整個汽車行業行特殊性,對于零配件有一個很強的對口特性,不同車使用的零配件(例如:輪胎、機油、三濾、雨刮、火花塞等)規格型號不一樣。在售賣汽車零配件的時候,不能像3C家電、服飾,需要結合用戶具體車輛信息推薦適合的配件商品。基于此原因,京東自建人車檔案模型并且利用算法清洗出百億級的車型-零配件的適配關系數據,最終形成“人->車-〉貨”關系鏈路,解決“人不識貨”的問題。 具體使用場景如下圖:

wKgaoWcR_MiAF4EfAAT978sd1S078.jpeg

?.

wKgZoWcR_MqAK3MzAANtNwzzHT403.jpeg

圖1.1京東商詳推薦商品 圖1.2京東加購彈窗推薦商品

2.數據模型

人-> 車->貨”關系的核心鏈路是由人(京東用戶)、乘用車和SKU這三部分組成。

首先,用戶在京東APP的商搜頁、商詳頁多個位置都可以選擇自己的車型信息進行綁定(例如:圖2.1,京東商詳綁車入口位置“+添加愛車”按鈕),建立“人車檔案”數據。

wKgaoWcR_MqAXWr3AATw2l9QXhA34.jpeg

?.

wKgZoWcR_MuAZJtdAANgcMfAbJE47.jpeg

圖2.1.京東商詳綁車入口位置 圖2.2.京東商搜綁車入口位置

其次,運營在后臺管理系統中將商品與車型進行綁定,建立“商品與車型關系”數據(商品與車型的關系數據量級在百億級別)。

最終,購買商品的時候,京東推薦系統可以通過用戶自己綁定的車型推薦出適合該車型的商品。具體商品適配車型數據模型,見圖2.3

wKgaoWcR_M2AOcHWAAI0yU6Log0665.png

??

圖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。

wKgZoWcR_M6AX3m3AACTCzYahjQ513.png

??

圖3.1位圖(bitmap)內部結構

3.2位圖(bitmap)數據寫流程

位圖(bitmap)是基于jimdb的SDS(簡單動態字符串)類型的一系列位操作,遵循jimdb的SDS特性,例如:位圖(bitmap)最大長度512M,最大可以存儲232位。以下是“big”字符串的SDS結構示例:

wKgaomcR_M-AbBuvAADfWEfEWXU899.png

??

圖3.2.1“big”字符串的SDS結構

SDS(簡單動態字符串)為了保證性能采用了空間預分配的策略:空間預分配用于優化SDS的字符串增長操作。SDS的API對一個SDS進行修改并且需要對SDS進行空間擴展的時候,程序不僅會為SDS分配修改所必須要的空間,還會為SDS分配額外的未使用空。具體預分配流程圖如下:

wKgaomcR_NGAWnpjAAJxULAmRvs332.png

??

圖3.2.2SDS預分配流程圖

位置1:創建SDS簡單字符串預分配空間為:偏移量/8+1。

位置2:剩余空間不足時,預分配空間流程。

3.3壓縮商品與車關系緩存

偏移量(自增ID) 全量車型 商品SKU
1 1165788 101362
2 1165793 101362

商品適配車型關系(百億級數據量)

商品與車關系緩存存儲過程中,采用了商品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次空間擴容,這樣來最大限度的提升緩存利用率,起到壓縮空間目的。緩存數據關系流程如下:

wKgaomcR_NOAIJVhAAHPI7utY9s519.png

??

圖3.3.1緩存數據關系流程

位置3:設置分段最大的偏移量,保證后續新增偏移量不再擴容空間。

位置4:設置分段較小的偏移量。

全量車型ID是定長7位的數字,如果用它作為偏移量將消耗內存巨大,所以采用對應自增ID作為偏移量。最終在bitmap緩存的商品SKU與車的適配關系緩存結構如下圖:

wKgaomcR_NSAbMtwAACrt0kyjjM782.png

??

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、單元化實現跨區域災備,保障大促系統穩定性。具體商品與車關系緩存架構如下:

wKgZomcR_NaAJW1kAALZ0atVmLE441.png

??

4.1商品與車關系緩存架構圖

位置6:集群路由,通過商品類型或者商品編號(POP商品)路由到不同緩存集群,便于橫向擴展,每個集群單分片限制,解決分片超過限制問題。

位置7:分片路由,保障Lua腳本搜索數據的底層數據集群分片相同,避免數據丟失。其中自營商品和POP商品的路由分別是main_sku_id和product_id。

位置8:自營商品緩存集群,單元化實現跨區域災備,采用自研DRC(Data Replication Center)數據同步機制。

位置9:POP商品緩存集群,通過商家編號拆分為兩個子集群。

5.高性能搜索

基于BitMap(位圖)緩存的商品與車關系數據,商詳調用接口的內部實現采用了Lua腳本來降低網絡開銷,保障整個接口的性能。以下是搜索接口的流程圖:

wKgaomcR_NeAZc5JAAG3ktclSW8202.png

??

5.1商詳搜索商品與車適配關系流程圖

位置10:商詳調用接口的時候,要傳兩個參數。第1個參數是全量車型ID列表,大約5個全量車型ID。第2個參數是商品SKU列表,SKU的數量極限超過200個。最后全量車型ID與商品SKU組合為上千個商品與車的關系后,再到百億級適配關系去搜索看是否匹配的。如果不匹配返回適配商品,反之則返回不適配。

Lua腳本減少了應用服務器與緩存服務器的交互,降低了網絡開銷的時間,達到提升搜索服務的性能。以下是Lua腳本具體代碼:

wKgZomcR_NiAdDNkAAPY3rVQ7wA158.png

??

5.2商詳搜索商品與車適配關系Lua代碼

基于以上緩存設計和Lua腳本的使用,整個接口T999小于13ms。具體的接口性能監控如下圖:

wKgaomcR_NqAE1K3AAqOPElpQBA925.png

??

5.3商詳搜索商品與車適配關系接口性能

6.總結

整個緩存結構設計的時候,使用BitMap(位圖)來存儲數據。解析SDS的內部存儲流程,通過存儲流程機制避開預分配空間節點,最大限度的利用緩存空間,避免資源浪費。采用Lua腳本來實現數據的適配搜索,降低網絡開銷,進一步提升接口的性能。希望此文對大家后續設計類似場景有一定的幫助和啟發。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7101

    瀏覽量

    89262
  • 內存
    +關注

    關注

    8

    文章

    3040

    瀏覽量

    74167
  • 緩存
    +關注

    關注

    1

    文章

    240

    瀏覽量

    26708
  • 京東
    +關注

    關注

    2

    文章

    999

    瀏覽量

    48589
收藏 人收藏

    評論

    相關推薦

    【NUCLEO-F412ZG申請】物聯網數據檢索

    申請理由:項目描述:用開發板開發一款物聯網數據檢索產品,輸入為一個UART口,輸出為一個UART口。來自物聯網數據采集設備的串口數據從輸入口進來,經過STM32F412接收、處理后,篩選出符合條件
    發表于 11-07 16:33

    求助:labview如何實現歷史數據檢索

    畢設救急:labview歷史數據檢索如何實現?
    發表于 05-14 10:35

    求大佬幫忙完善一下這個圖書信息檢索的小程序

    這個程序網上弄得,關于數據檢索這一塊不知道怎么弄,我是初學者,請各位多多指點,txt圖書信息怎么寫逗可以,只要程序可以運行檢索就好
    發表于 05-11 15:13

    模擬京東非淘寶,購買商品SKU SPU點擊過濾屬性

    模擬京東非淘寶,購買商品 SKU SPU點擊過濾屬性參數
    發表于 05-25 09:32

    分析一下MySQL數據庫與ElasticSearch的實際應用

    ,可以使用ElasticSearch全文檢索引擎來解決這個問題,使得TB級數據在毫秒就能返回檢索結果,該引擎使用倒排索引,流程優化如下圖:原作者:蟹黃瓜子 GreatSQL社區
    發表于 06-15 17:15

    基于關系數據庫的本體生成器設計與實現

    為了利用已有的關系數據庫自動生成本體,分析關系數據庫與OWL 本體的形式化對應關系,設計一套轉換規則,給出一種由關系數據庫出發自動建立本體的新方法。在VC++環境下實現一
    發表于 03-20 14:23 ?18次下載

    關系數據庫是什么?

    關系數據庫是什么? 數字時代伊始,數據庫就一直是商業計算的核心組成部分。事實上,關系數據庫誕生于1970年。那一年,IBM的研究員E.F. Codd撰寫了一篇論文,概述了主
    發表于 07-31 12:26 ?2225次閱讀

    打造百億無人智能制造基地,京東無人總部選擇落戶長沙

    無人科技產業布局瀟湘大地,京東百億無人智能產業基地持續落地!6月11日,京東集團與長沙經濟開發區就京東無人
    發表于 06-20 15:24 ?2747次閱讀

    關系數據庫系統的特點

    關系數據庫系統建立了關系模型,并用它來處理數據關系模型在表中將信息與字段關聯起來(也就是schemas),從而存儲數據
    的頭像 發表于 02-22 15:09 ?8251次閱讀

    為什么要使用非關系數據

    著互聯網web2.0網站的興起,非關系型的數據庫現在成了一個極其熱門的新領域,非關系數據庫產品的發展非常迅速。而傳統的關系數據庫在應付web2.0網站,特別是超大規模和高并發的SNS類
    發表于 09-25 17:38 ?10次下載
    為什么要使用非<b class='flag-5'>關系數據</b>庫

    如何實現一種針對關系數據庫儲存過程的空間可視化檢索算法

    該文針對利用GIS現有空間查詢接ISI進行海量遙感柵格數據庫空間可視化檢索效率低下的問題。在深入研究海量遙感柵格數據庫的空間可視化檢索特點的基礎上,提出了一種直接針對
    發表于 09-29 17:07 ?5次下載

    如何使用工業實時數據庫與西門子PLC通訊?

    工業實時數據庫是一個基于時間信息的存儲倉庫,存儲大量的過程數據,并且提供靈活的數據檢索過程。 我們平時經常使用MySQL/SQL Server/Oracle等這些傳統的關系數據庫,為什
    的頭像 發表于 03-29 15:46 ?9207次閱讀
    如何使用工業實時<b class='flag-5'>數據</b>庫與西門子PLC通訊?

    面向數字取證專家的一線圖像數據檢索

    本文概述了取證專家和急救人員為何以及如何從提供圖像數據檢索的工具中受益。所審查的產品是用于數據檢索和映像裝載的一線工具,因為如果不先裝載映像,就無法檢索數據。此外,能夠在任何操作系統下
    的頭像 發表于 10-20 17:07 ?2100次閱讀
    面向數字取證專家的一線圖像<b class='flag-5'>數據檢索</b>

    使用涂鴉link SDK的土壤水分數據檢索應用

    電子發燒友網站提供《使用涂鴉link SDK的土壤水分數據檢索應用.zip》資料免費下載
    發表于 06-14 10:42 ?0次下載
    使用涂鴉link SDK的土壤水分<b class='flag-5'>數據檢索</b>應用

    軟件系統的數據檢索設計

    軟件系統的數據檢索設計 隨著業務量加大,數據檢索量也會日益增多,為了減輕數據庫壓力,本系統采用ElasticSearch來實現數據檢索功能。 簡單來說,Elasticsearch 是一
    的頭像 發表于 08-22 14:08 ?292次閱讀
    軟件系統的<b class='flag-5'>數據檢索</b>設計
    主站蜘蛛池模板: 亚洲日本免费 | 欧美精品四虎在线观看 | 国产汉服被啪福利在线观看 | 亚洲成a人伦理 | 一级毛片西西人体44rt高清 | 日日噜噜噜夜夜爽爽狠狠 | 神马电影天堂网 | 天天综合天天综合 | 日本国产视频 | 特级做a爰片毛片免费看一区 | 亚洲欧洲第一页 | 午夜性爽视频男人的天堂在线 | 欧美大狠狠大臿蕉香蕉大视频 | 可以免费看黄的网站 | 天天色综合3 | 人与禽性视频77777 | 热门国产xvideos中文 | 亚洲六月婷婷 | 亚洲宅男天堂a在线 | 久草视频这里只有精品 | 午夜久久久久久 | 九月丁香婷婷亚洲综合色 | 咪咪爱毛片 | 国产香蕉精品视频在 | 国产高清区 | julia一区二区三区中文字幕 | 男啪女视频免费观看网站 | 久久青草精品一区二区三区 | 免费黄色 | 黄色在线看网站 | 欧美另类v | 韩国三级中文 | 伊人天伊人天天网综合视频 | 日韩美a一级毛片 | 宅宅午夜亚洲精品 | 天天干夜啪 | 国产精品一级毛片不收费 | 欧美色视频在线观看 | 亚洲444kkk| 99久久精品免费看国产 | 好色成人网 |