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