chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

京東APP百億級商品與車關(guān)系數(shù)據(jù)檢索實踐

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-10-18 14:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:京東零售 張強(qiáng)

導(dǎo)讀

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

1.背景

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

wKgaoWcR_MiAF4EfAAT978sd1S078.jpeg

?.

wKgZoWcR_MqAK3MzAANtNwzzHT403.jpeg

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

2.數(shù)據(jù)模型

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

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

wKgaoWcR_MqAXWr3AATw2l9QXhA34.jpeg

?.

wKgZoWcR_MuAZJtdAANgcMfAbJE47.jpeg

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

其次,運(yùn)營在后臺管理系統(tǒng)中將商品與車型進(jìn)行綁定,建立“商品與車型關(guān)系”數(shù)據(jù)(商品與車型的關(guān)系數(shù)據(jù)量級在百億級別)。

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

wKgaoWcR_M2AOcHWAAI0yU6Log0665.png

??

圖2.3京東商品適配車型數(shù)據(jù)模型

3.緩存結(jié)構(gòu)設(shè)計

基于前面兩個部分的介紹,我們可以了解到整個商品搜索適配推薦存在兩個最核心問題。第一、百億級商品適配車型數(shù)據(jù)的存儲結(jié)構(gòu)設(shè)計,盡可能的占用資源成本最小;第二、商詳通過用戶車型來搜索適配商品時,必須保證接口性能的TP99位于毫秒級。最終技術(shù)選型的時候,采用了jimdb的位圖(bitmap)函數(shù)來進(jìn)行數(shù)據(jù)存儲。

3.1位圖(bitmap)結(jié)構(gòu)

位圖(bitmap)是通過最小的單位bit來進(jìn)行0或者1的設(shè)置,表示某個元素對應(yīng)的值或者狀態(tài)。一個bit的值是0或者1;也就是說一個bit能存儲的最多信息是2。

?位(bit):計算機(jī)內(nèi)部數(shù)據(jù)存儲的最小單位,例如:11001100是一個八位二進(jìn)制數(shù)。

?字節(jié)(byte):計算機(jī)中數(shù)據(jù)處理的基本單位,習(xí)慣上用大寫B(tài)來表示,1B(byte,字節(jié))=8bit。

wKgZoWcR_M6AX3m3AACTCzYahjQ513.png

??

圖3.1位圖(bitmap)內(nèi)部結(jié)構(gòu)

3.2位圖(bitmap)數(shù)據(jù)寫流程

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

wKgaomcR_M-AbBuvAADfWEfEWXU899.png

??

圖3.2.1“big”字符串的SDS結(jié)構(gòu)

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

wKgaomcR_NGAWnpjAAJxULAmRvs332.png

??

圖3.2.2SDS預(yù)分配流程圖

位置1:創(chuàng)建SDS簡單字符串預(yù)分配空間為:偏移量/8+1。

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

3.3壓縮商品與車關(guān)系緩存

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

商品適配車型關(guān)系(百億級數(shù)據(jù)量)

商品與車關(guān)系緩存存儲過程中,采用了商品SKU作為KEY,全量車型ID的偏移量(采用偏移量是為降低內(nèi)存消耗)作為VALUE值來進(jìn)行存儲。

全量車型ID大約有幾十萬的數(shù)據(jù)量,極限情況下一個商品SKU可以適配幾十萬輛車,很容易造成緩存大KEY的問題,為此我們進(jìn)行了偏移量(全量車型ID對應(yīng)的自增ID)的分段處理。具體是按照:SKU作為緩存KEY的基礎(chǔ)上,追加一個分段標(biāo)記數(shù)字作為新KEY,每個偏移量都會按照分段范圍對應(yīng)一個分段標(biāo)記數(shù)字。例如:偏移量1~50000,對應(yīng)緩存KEY為SKU+0;偏移量50001~100000,對應(yīng)緩存KEY為SKU+1,其它偏移量以此類推,這樣就保證了一個SKU即使適配所有車輛也不會出現(xiàn)緩存大KEY的情況。

BitMap緩存結(jié)構(gòu)底層使用SDS簡單字符串,為了保證性能采用了預(yù)分配空間的策略(圖3.2.2,“緩存BitMap內(nèi)部存儲流程圖”的“位置2”中虛線框圈選),這樣在緩存商品與車關(guān)系的時候浪費(fèi)了大量的緩存空間。為此我們調(diào)整了偏移量存儲順序,首先獲取到需要緩存的車型內(nèi)最大的偏移量,保證同一個緩存KEY第1次創(chuàng)建SDS簡單字符串(圖3.2.2,“緩存BitMap內(nèi)部存儲流程圖”的“位置1”中虛線框圈選)后,不再進(jìn)行第2次空間擴(kuò)容,這樣來最大限度的提升緩存利用率,起到壓縮空間目的。緩存數(shù)據(jù)關(guān)系流程如下:

wKgaomcR_NOAIJVhAAHPI7utY9s519.png

??

圖3.3.1緩存數(shù)據(jù)關(guān)系流程

位置3:設(shè)置分段最大的偏移量,保證后續(xù)新增偏移量不再擴(kuò)容空間。

位置4:設(shè)置分段較小的偏移量。

全量車型ID是定長7位的數(shù)字,如果用它作為偏移量將消耗內(nèi)存巨大,所以采用對應(yīng)自增ID作為偏移量。最終在bitmap緩存的商品SKU與車的適配關(guān)系緩存結(jié)構(gòu)如下圖:

wKgaomcR_NSAbMtwAACrt0kyjjM782.png

??

3.3.2商品與車緩存結(jié)構(gòu)圖

位置5:spuId用{}括起來表示緩存路由(Lua腳本中同一次請求,數(shù)據(jù)必須在緩存同一個分片上,否則會丟失數(shù)據(jù))。POP商品spuId是SKU的產(chǎn)品ID,自營商品spuId是SKU的MainSkuId。

備注:

1、自營商品MainSkuId可能發(fā)生變化,所以我們接入了商品變化MQ消息,實時調(diào)整SKU與車適配關(guān)系的存儲位置。

2、京東商詳頁面中每個不同的規(guī)格/型號分別對應(yīng)不同的SKU,但是它們都對應(yīng)同一個SpuId或者M(jìn)ainSkuId。

4.緩存架構(gòu)設(shè)計

商品與車的關(guān)系數(shù)據(jù)量每天都在不斷增長,要求緩存架構(gòu)設(shè)計,需要支持集群橫向/縱向擴(kuò)容和來滿足業(yè)務(wù)發(fā)展以及高可用性。整個緩存架構(gòu)體系主要有前端、京東養(yǎng)車商品與車關(guān)系層和存儲三部分組成。

“商品與車關(guān)系緩存架構(gòu)”層核心包括:1、“集群路由”層,實現(xiàn)了集群橫向擴(kuò)容,保證數(shù)據(jù)量增漲的時候,緩存容量也能跟上。2、“分片路由”層,保證搜索的底層數(shù)據(jù)的分片相同,避免數(shù)據(jù)丟失。

“存儲”層核心包括:1、實現(xiàn)了緩存壓縮,參見3.3壓縮商品與車關(guān)系緩存。2、單元化實現(xiàn)跨區(qū)域災(zāi)備,保障大促系統(tǒng)穩(wěn)定性。具體商品與車關(guān)系緩存架構(gòu)如下:

wKgZomcR_NaAJW1kAALZ0atVmLE441.png

??

4.1商品與車關(guān)系緩存架構(gòu)圖

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

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

位置8:自營商品緩存集群,單元化實現(xiàn)跨區(qū)域災(zāi)備,采用自研DRC(Data Replication Center)數(shù)據(jù)同步機(jī)制。

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

5.高性能搜索

基于BitMap(位圖)緩存的商品與車關(guān)系數(shù)據(jù),商詳調(diào)用接口的內(nèi)部實現(xiàn)采用了Lua腳本來降低網(wǎng)絡(luò)開銷,保障整個接口的性能。以下是搜索接口的流程圖:

wKgaomcR_NeAZc5JAAG3ktclSW8202.png

??

5.1商詳搜索商品與車適配關(guān)系流程圖

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

Lua腳本減少了應(yīng)用服務(wù)器與緩存服務(wù)器的交互,降低了網(wǎng)絡(luò)開銷的時間,達(dá)到提升搜索服務(wù)的性能。以下是Lua腳本具體代碼:

wKgZomcR_NiAdDNkAAPY3rVQ7wA158.png

??

5.2商詳搜索商品與車適配關(guān)系Lua代碼

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

wKgaomcR_NqAE1K3AAqOPElpQBA925.png

??

5.3商詳搜索商品與車適配關(guān)系接口性能

6.總結(jié)

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

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7325

    瀏覽量

    94302
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    9

    文章

    3185

    瀏覽量

    76244
  • 緩存
    +關(guān)注

    關(guān)注

    1

    文章

    248

    瀏覽量

    27697
  • 京東
    +關(guān)注

    關(guān)注

    2

    文章

    1094

    瀏覽量

    49945
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    【NUCLEO-F412ZG申請】物聯(lián)網(wǎng)數(shù)據(jù)檢索

    申請理由:項目描述:用開發(fā)板開發(fā)一款物聯(lián)網(wǎng)數(shù)據(jù)檢索產(chǎn)品,輸入為一個UART口,輸出為一個UART口。來自物聯(lián)網(wǎng)數(shù)據(jù)采集設(shè)備的串口數(shù)據(jù)從輸入口進(jìn)來,經(jīng)過STM32F412接收、處理后,篩選出符合條件
    發(fā)表于 11-07 16:33

    求助:labview如何實現(xiàn)歷史數(shù)據(jù)檢索?

    畢設(shè)救急:labview歷史數(shù)據(jù)檢索如何實現(xiàn)?
    發(fā)表于 05-14 10:35

    基于關(guān)系數(shù)據(jù)庫的本體生成器設(shè)計與實現(xiàn)

    為了利用已有的關(guān)系數(shù)據(jù)庫自動生成本體,分析關(guān)系數(shù)據(jù)庫與OWL 本體的形式化對應(yīng)關(guān)系,設(shè)計一套轉(zhuǎn)換規(guī)則,給出一種由關(guān)系數(shù)據(jù)庫出發(fā)自動建立本體的新方法。在VC++環(huán)境下實現(xiàn)一
    發(fā)表于 03-20 14:23 ?18次下載

    關(guān)系數(shù)據(jù)庫是什么?

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

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

    無人科技產(chǎn)業(yè)布局瀟湘大地,京東百億無人智能產(chǎn)業(yè)基地持續(xù)落地!6月11日,京東集團(tuán)與長沙經(jīng)濟(jì)開發(fā)區(qū)就京東無人
    發(fā)表于 06-20 15:24 ?3009次閱讀

    如何實現(xiàn)一種針對關(guān)系數(shù)據(jù)庫儲存過程的空間可視化檢索算法

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

    面向數(shù)字取證專家的一線圖像數(shù)據(jù)檢索

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

    使用涂鴉link SDK的土壤水分數(shù)據(jù)檢索應(yīng)用

    電子發(fā)燒友網(wǎng)站提供《使用涂鴉link SDK的土壤水分數(shù)據(jù)檢索應(yīng)用.zip》資料免費(fèi)下載
    發(fā)表于 06-14 10:42 ?0次下載
    使用涂鴉link SDK的土壤水分<b class='flag-5'>數(shù)據(jù)檢索</b>應(yīng)用

    軟件系統(tǒng)的數(shù)據(jù)檢索設(shè)計

    軟件系統(tǒng)的數(shù)據(jù)檢索設(shè)計 隨著業(yè)務(wù)量加大,數(shù)據(jù)檢索量也會日益增多,為了減輕數(shù)據(jù)庫壓力,本系統(tǒng)采用ElasticSearch來實現(xiàn)數(shù)據(jù)檢索功能。 簡單來說,Elasticsearch 是一
    的頭像 發(fā)表于 08-22 14:08 ?746次閱讀
    軟件系統(tǒng)的<b class='flag-5'>數(shù)據(jù)檢索</b>設(shè)計

    京東API接口的應(yīng)用場景介紹

    )。這些接口基于RESTful架構(gòu),使用HTTP協(xié)議進(jìn)行通信,數(shù)據(jù)格式通常為JSON,支持OAuth 2.0認(rèn)證以確保安全性。下面從技術(shù)角度,詳細(xì)介紹幾個關(guān)鍵應(yīng)用場景,包括其實現(xiàn)機(jī)制和優(yōu)勢。 1. 商品信息檢索與展示 應(yīng)用場景
    的頭像 發(fā)表于 11-03 14:13 ?258次閱讀
    <b class='flag-5'>京東</b>API接口的應(yīng)用場景介紹

    京東商品詳情 ID(即 SKU ID)獲取商品詳細(xì)信息參數(shù)

    ? 利用京東商品詳情 ID(即 SKU ID)獲取商品詳細(xì)信息,可通過京東開放平臺官方 API 或非官方接口(逆向解析)實現(xiàn)。以下是兩種方式的示例展示,包含代碼實現(xiàn)與
    的頭像 發(fā)表于 11-11 10:47 ?655次閱讀
    <b class='flag-5'>京東</b><b class='flag-5'>商品</b>詳情 ID(即 SKU ID)獲取<b class='flag-5'>商品</b>詳細(xì)信息參數(shù)

    京東API實時接口:京東商品評論數(shù)據(jù)接口

    ??京東商品評論數(shù)據(jù)接口(通常表示為 JD.item_review)是京東開放平臺提供的一種API,它允許開發(fā)者獲取京東
    的頭像 發(fā)表于 11-11 11:21 ?430次閱讀

    京東平臺獲取商品詳情原數(shù)據(jù)API接口技術(shù)解析

    ? ?在電商系統(tǒng)開發(fā)、價格監(jiān)控、競品分析等場景中,獲取商品的原始詳情數(shù)據(jù)是基礎(chǔ)且關(guān)鍵的一環(huán)。京東作為國內(nèi)領(lǐng)先的電商平臺,提供了相應(yīng)的API接口供開發(fā)者調(diào)用。本文將介紹如何使用京東開放平
    的頭像 發(fā)表于 11-13 14:35 ?469次閱讀
    <b class='flag-5'>京東</b>平臺獲取<b class='flag-5'>商品</b>詳情原<b class='flag-5'>數(shù)據(jù)</b>API接口技術(shù)解析

    京東商品評論API助力電商數(shù)據(jù)分析

    京東商品評論API是京東開放平臺提供的接口,允許開發(fā)者通過商品ID獲取該商品的用戶評論數(shù)據(jù)。這些
    的頭像 發(fā)表于 11-21 10:29 ?232次閱讀

    京東按關(guān)鍵字搜索商品 API接口item_search Pro

    列表,獲取 商品基礎(chǔ)信息、價格、銷量、店鋪、庫存 等核心數(shù)據(jù),是電商選品、競品分析、價格監(jiān)控、市場調(diào)研的關(guān)鍵技術(shù)工具。 一、接口核心定位與官方關(guān)系 官方接口對應(yīng) :本質(zhì)是京東開放平臺
    的頭像 發(fā)表于 01-05 11:03 ?237次閱讀