劉文華
摘? 要: 電商行業(yè)的海量數(shù)據(jù)存儲,多采用以客戶為切分鍵進(jìn)行分庫分表的策略,但由于大客戶和普通客戶數(shù)據(jù)體量差距巨大,往往會導(dǎo)致數(shù)據(jù)在各庫表中分布嚴(yán)重不均。本文基于分布式數(shù)據(jù)庫存儲,設(shè)計(jì)了區(qū)分大客戶和普通客戶的分庫分表策略、能夠及時識別客戶數(shù)據(jù)變化的實(shí)時數(shù)據(jù)監(jiān)控,以及基于客戶分類動態(tài)選擇存儲策略的動態(tài)路由組件,可有效保障數(shù)據(jù)的均勻分布。
關(guān)鍵詞: 客戶分類; 海量數(shù)據(jù); 分庫分表; 動態(tài)路由策略; 實(shí)時數(shù)據(jù)監(jiān)控
中圖分類號:TP311.1? ? ? ? ? 文獻(xiàn)標(biāo)識碼:A ? 文章編號:1006-8228(2023)06-07-04
Dynamic routing storage strategy of mass data based on account classification
Liu Wenhua
(Beijing Wuzi University, Beijing 100000, China)
Abstract: The mass data storage in e-commerce and other industries mostly adopts the strategy of taking the account as the sharding key to divide databases and tables. However, due to the huge gap in the data volume between key account and ordinary account, the distribution of data in each database and table is often seriously uneven. Based on distributed database storage, a customized strategy of divide databases and tables for key account and ordinary account is designed. The real-time data monitoring can identify account data changes in time, and the dynamic routing component can dynamically select storage strategy based on account classification. It can effectively ensure the uniform distribution of data.
Key words: account classification; mass data; divide databases and tables; dynamic routing strategy; real-time data monitoring
0 引言
隨著互聯(lián)網(wǎng)各項(xiàng)技術(shù)的日臻成熟,物流體系逐步完善,電商行業(yè)快速發(fā)展。線上支付方式呈多樣性,網(wǎng)上交易量與日俱增,一些頭部電商平臺的日均交易量已至千萬量級,隨之而來,每天產(chǎn)生的各類業(yè)務(wù)數(shù)據(jù)也呈指數(shù)級增長,如訂單、支付、物流、營銷等海量業(yè)務(wù)數(shù)據(jù)日均數(shù)據(jù)增量已達(dá)到百億量級。如此海量數(shù)據(jù)通過傳統(tǒng)的單機(jī)數(shù)據(jù)庫存儲,從存儲性能和存儲容量上顯然都已無法滿足要求。
分布式數(shù)據(jù)庫[1,2],利用其多節(jié)點(diǎn)數(shù)據(jù)分片存儲的方式,突破了單機(jī)服務(wù)器容量和吞吐量的限制,配以合理的分庫分表策略、數(shù)據(jù)存儲路由策略,則可滿足海量數(shù)據(jù)高效存儲的使用場景。
數(shù)據(jù)存儲路由策略,一般以客戶編號為切分鍵,基于庫表數(shù)量進(jìn)行取模計(jì)算,以定位數(shù)據(jù)存儲的庫表位置,使數(shù)據(jù)能均勻的分散存儲至各庫表之中。這種方案是以每個客戶產(chǎn)生的數(shù)據(jù)量相差不大為前提的,但實(shí)際場景中往往存在一些大客戶,其產(chǎn)生的業(yè)務(wù)數(shù)據(jù)量遠(yuǎn)遠(yuǎn)大于普通客戶,這種情況下,會出現(xiàn)大客戶海量數(shù)據(jù)存儲于個別庫表之中,導(dǎo)致數(shù)據(jù)庫數(shù)據(jù)分布嚴(yán)重不均,個別庫表數(shù)據(jù)量巨大(億量級),嚴(yán)重影響數(shù)據(jù)庫的性能、吞吐量和磁盤利用率。
1 存儲策略
由于客戶業(yè)務(wù)并非一成不變,隨著自身業(yè)務(wù)的發(fā)展,很可能會在普通客戶和大客戶之間來回轉(zhuǎn)換,通過設(shè)計(jì)客戶日增業(yè)務(wù)數(shù)據(jù)監(jiān)控任務(wù),來識別客戶身份轉(zhuǎn)換,動態(tài)調(diào)整數(shù)據(jù)路由策略,設(shè)計(jì)數(shù)據(jù)路由策略組件,支持實(shí)時動態(tài)切換路由策略,以便及時有效應(yīng)對客戶身份變化。
為解決大客戶和普通客戶數(shù)據(jù)量不均衡所產(chǎn)生的數(shù)據(jù)存儲問題,本文主要從分庫分表[3,4]策略設(shè)計(jì)、大客戶動態(tài)識別,以及數(shù)據(jù)監(jiān)控設(shè)計(jì)和動態(tài)路由組件設(shè)計(jì)三方面進(jìn)行闡述,整體系統(tǒng)框架圖如圖1所示。
1.1 分庫分表策略設(shè)計(jì)
分庫分表策略的設(shè)計(jì),主要針對大客戶和普通客戶,制定不同的分庫分表策略。
1.1.1 普通客戶
設(shè)計(jì)原則:普通客戶每日產(chǎn)生的業(yè)務(wù)數(shù)據(jù)量差異較小,則以客戶為切分鍵進(jìn)行分庫分表設(shè)計(jì),數(shù)據(jù)將均勻分散存儲至數(shù)據(jù)庫各庫表之中。
分庫分表規(guī)則:
分庫數(shù)量:N個數(shù)據(jù)庫
分表數(shù)量:M*N(每個數(shù)據(jù)庫M張表)
所在庫表計(jì)算方式:
所在分表=(Hash(客戶編號)%(M*N))+1
所在分庫=(Hash(客戶編號)%(M*N)/M)+1
1.1.2 大客戶
設(shè)計(jì)原則:大客戶每日產(chǎn)生的業(yè)務(wù)數(shù)據(jù)量龐大,可能達(dá)日增百萬量級,則設(shè)計(jì)為每日一張表存儲當(dāng)日產(chǎn)生的數(shù)據(jù),存儲一年數(shù)據(jù),則共需創(chuàng)建366張表,平均分布于全量分庫當(dāng)中。每年同一日期的數(shù)據(jù),存儲在同一張表中,表可重復(fù)使用??紤]到大客戶數(shù)量多時,即使每日一張表,也可能會達(dá)到千萬甚至是上億量級,因此設(shè)計(jì)N套分表,每套為366張,共計(jì)N*366張表。將客戶平均分配到N個分組中,使各分表得以充分利用,數(shù)據(jù)可以均勻分配至數(shù)據(jù)庫各庫表之中。
分庫分表規(guī)則:
分庫數(shù)量:N個數(shù)據(jù)庫
分表數(shù)量:M(套)*366
1.2 大客戶動態(tài)識別及數(shù)據(jù)監(jiān)控設(shè)計(jì)
大客戶動態(tài)識別及數(shù)據(jù)監(jiān)控[5]設(shè)計(jì)主要為及時識別出大客戶和普通客戶身份的轉(zhuǎn)換,從而動態(tài)調(diào)整數(shù)據(jù)路由策略,及時應(yīng)對客戶身份變化。
大客戶定義標(biāo)準(zhǔn):連續(xù)M日,每日新增業(yè)務(wù)數(shù)據(jù)量>N萬
每日定時任務(wù),查詢業(yè)務(wù)數(shù)據(jù)庫,以客戶維度匯總統(tǒng)計(jì)前一日該客戶產(chǎn)生的業(yè)務(wù)數(shù)據(jù)量,統(tǒng)計(jì)數(shù)據(jù)存儲至客戶日增數(shù)據(jù)統(tǒng)計(jì)表(表2)。
1.3 動態(tài)路由組件設(shè)計(jì)
動態(tài)路由組件可根據(jù)客戶分類動態(tài)地選擇數(shù)據(jù)存儲策略,結(jié)合大客戶動態(tài)識別及數(shù)據(jù)監(jiān)控功能,可做到及時有效應(yīng)對客戶身份變化。
動態(tài)加載大客戶配置信息,即將監(jiān)控系統(tǒng)識別出的大客戶信息,動態(tài)加載至系統(tǒng)內(nèi)存當(dāng)中,以便當(dāng)查詢路由時,可以及時高效的讀取使用。主要包含如下兩種加載方式:
⑴ 啟動加載
動態(tài)路由組件啟動時,查詢大客戶配置信息,并加載至內(nèi)存當(dāng)中。
⑵ 定時加載
動態(tài)路由組件啟動后,啟動定時任務(wù),定時查詢大客戶配置信息,并加載至內(nèi)存當(dāng)中。
動態(tài)路由,即執(zhí)行數(shù)據(jù)庫操作時,根據(jù)配置信息,動態(tài)選擇定位數(shù)據(jù)庫表的策略,以便準(zhǔn)確定位數(shù)據(jù)所在庫表信息,主要流程如下。
⑴ 判斷查詢客戶是否在大客戶配置信息中。
⑵ 如果在大客戶配置信息中且查詢時間條件在生效時間范圍內(nèi),則根據(jù)大客戶路由策略定位所在庫表。
⑶ 如果不滿足條件⑵,則根據(jù)普通客戶路由策略定位所在庫表。
2 結(jié)論
本文針對高并發(fā)海量數(shù)據(jù)[6]存儲場景,由于大客戶數(shù)據(jù)量大,導(dǎo)致數(shù)據(jù)存儲分布不均,從而影響數(shù)據(jù)庫整體性能、吞吐量和磁盤利用率的問題,提出了一種高效可行的解決方案,并完整詳細(xì)闡述了該方案的理論依據(jù)和技術(shù)架構(gòu)。設(shè)計(jì)了適用于大客戶和普通客戶各自的分庫分表規(guī)則,解決了不區(qū)分客戶分類統(tǒng)一分庫分表策略帶來的數(shù)據(jù)傾斜問題。設(shè)計(jì)了客戶數(shù)據(jù)監(jiān)控策略,通過監(jiān)控客戶業(yè)務(wù)數(shù)據(jù)的發(fā)展變化,能夠及時識別客戶身份的變化,輔助動態(tài)路由組件及時動態(tài)的調(diào)整路由策略。設(shè)計(jì)了動態(tài)路由組件,可以根據(jù)不同的客戶分類,選擇合適的路由策略,并實(shí)現(xiàn)了動態(tài)加載功能,可以準(zhǔn)確及時的加載更新客戶配置和路由配置的變更。本方案普遍適用于存在海量數(shù)據(jù)存儲,且不同客戶分類業(yè)務(wù)數(shù)據(jù)量差異較大的場景,希望能給有類似場景的開發(fā)者,提供一些借鑒思路。
參考文獻(xiàn)(References):
[1] 劉曉光.基于MySQL的分布式SQL數(shù)據(jù)庫的設(shè)計(jì)與實(shí)現(xiàn)[D].
碩士,中國科學(xué)院大學(xué)(工程管理與信息技術(shù)學(xué)院),2016
[2] 喬洪宇.分布式數(shù)據(jù)庫中間件驅(qū)動模塊的設(shè)計(jì)與實(shí)現(xiàn)[D].
碩士,哈爾濱工業(yè)大學(xué),2014
[3] 沈佳杰,盧修文,向望,等.分布式存儲系統(tǒng)讀寫一致性算法
性能優(yōu)化研究綜述[J].計(jì)算機(jī)工程與科學(xué),2022,44(4):571-583
[4] 王凌暉,解云月,周美華.Hadoop分布式存儲架構(gòu)的性能
分析[J].現(xiàn)代電子技術(shù),2018,41(18):92-95
[5] 孫超,肖文名,曾樂,等.海量監(jiān)視數(shù)據(jù)云存儲服務(wù)模型的設(shè)計(jì)
與實(shí)現(xiàn)[J].武漢大學(xué)學(xué)報(bào)(信息科學(xué)版),2020,45(7):1099-1106
[6] 李韜睿,徐超,胡龍舟,等.基于云計(jì)算技術(shù)的海量信息分布式
存儲研究[J].微型電腦應(yīng)用,2022,38(10):90-93