[No.X071]
重慶格洛博電子商務(wù)有限公司是一家專注于跨境貿(mào)易B2C電子商務(wù)公司。格洛博早期主營互聯(lián)網(wǎng)行業(yè)海外流量服務(wù)及流量變現(xiàn),2018年初開始主力運營綜合類商城網(wǎng)站,以客戶需求為導(dǎo)向,以誠信之道為根本,以優(yōu)質(zhì)服務(wù)為使命,以物惠全球為愿景,為全球用戶提供多元化的互動式購物體驗,全方位打造B2C跨境電子商務(wù)綜合體。
格洛博數(shù)據(jù)技術(shù)團隊基于DorisDB建立一個實時分析系統(tǒng)。生產(chǎn)環(huán)境引入DorisDB后,查詢速度得到明顯提升,較DorisDB上線前提升至少10倍以上。
業(yè)務(wù)痛點及技術(shù)挑戰(zhàn)
格洛博作為一家自研電商平臺的電子商務(wù)公司,自主研發(fā)了廣告效果分析系統(tǒng)、訂單管理系統(tǒng)、供應(yīng)商管理系統(tǒng)、采購管理系統(tǒng)、倉儲管理系統(tǒng)、物流管理系統(tǒng)等,多個系統(tǒng)各類明細數(shù)據(jù)篩選條件較多,實時數(shù)據(jù)自定義多維度分析報表較多,包括廣告數(shù)據(jù)分析、銷售訂單分析、供應(yīng)商分析、采購訂單分析、庫存分析、物流分析等等。
目前公司業(yè)務(wù)需求在技術(shù)實施過程中,由于業(yè)務(wù)增長較快,團隊研發(fā)能力無法快速跟上,大量業(yè)務(wù)依托于MySQL實現(xiàn),主要存在技術(shù)難點如下:
1.數(shù)據(jù)量大:業(yè)務(wù)明細數(shù)據(jù)較多,總體達10億數(shù)據(jù)以上;
2.多表join:各類多維度分析報表較多,涉及多個大表join;
3.實時分析:業(yè)務(wù)依據(jù)廣告效果投放,實時分析訂單變化,及時調(diào)整廣告預(yù)算;
4.實時監(jiān)控:動態(tài)監(jiān)控下單流程行為,實時分析系統(tǒng)異常;
5.日志數(shù)據(jù):日志類與業(yè)務(wù)類數(shù)據(jù)同時存在于一體,沒有區(qū)分冷熱數(shù)據(jù),導(dǎo)致MySQL性能下降。
基于以上技術(shù)難點,我們期望尋找到可替代MySQL的數(shù)據(jù)庫,或建立一個OLAP實時分析系統(tǒng),提供一套快速、穩(wěn)定的實時數(shù)據(jù)服務(wù)。
技術(shù)選型
為解決實時分析的時效性,同時又能保證數(shù)據(jù)快速寫入查詢,先后調(diào)研了TiDB、ClickHouse、DorisDB,匯總?cè)缦拢?/p>
•TiDB:一款定位于在線事務(wù)處理/在線分析處理(HTAP)的融合數(shù)據(jù)庫產(chǎn)品,可替換MySQL,但生產(chǎn)環(huán)境要求配置較高,同時替換現(xiàn)有的MySQL數(shù)據(jù)庫成本高。
•ClickHouse:一款開源的OLAP列式分析系統(tǒng),可單獨部署不影響現(xiàn)有架構(gòu),面向大寬表,支持MySQL外表,但無法支持好多表join,同時現(xiàn)有的業(yè)務(wù)SQL也需要一定部分改寫,運維相對復(fù)雜。
•DorisDB:一款基于Apache開源基金會頂級項目Apache Doris開發(fā)的新一代極速MPP分析型數(shù)據(jù)庫,可單獨部署不影響現(xiàn)有架構(gòu),可多表join,實時數(shù)據(jù)查詢分析快,現(xiàn)有業(yè)務(wù)SQL基本無需改寫,支持MySQL外表,運維簡單,同時支持高并發(fā)、冷熱數(shù)據(jù)分離。
綜上所述,決定使用DorisDB建立一個實時分析系統(tǒng)。
數(shù)據(jù)同步
#FormatImgID_0#
如上圖所示,我們使用Canal+Kafka方式實時將MySQL同步到DorisDB。Canal是阿里巴巴開源的一個Mysql binlog同步工具,通過Canal我們可以把Mysql的數(shù)據(jù)同步到Kafka,在Kafka中數(shù)據(jù)是用Json的格式生成的,然后用DorisDB的Routine Load方式消費Kafka數(shù)據(jù)同步到DorisDB。歷史數(shù)據(jù)通過創(chuàng)建MySQL外部表,使用INSERT SELECT方式導(dǎo)入到DorisDB。
冷熱數(shù)據(jù)存儲
實際使用DorisDB過程中,我們采用SSD/NVME+HDD實現(xiàn)冷熱數(shù)據(jù)分離存儲,SSD/NVME存儲今年數(shù)據(jù),HDD存儲往年數(shù)據(jù)。同時DorisDB也支持冷熱數(shù)據(jù)自動遷移的功能,相關(guān)建表參數(shù)可參考storage_medium、storage_cooldown_time等。
DorisDB在各場景中應(yīng)用
1.自定義多維度分析:業(yè)務(wù)人員自定義各種維度時,系統(tǒng)自動化動態(tài)多表join,通過查詢DorisDB快速響應(yīng)查詢結(jié)果;
2.多條件明細數(shù)據(jù)查詢:實現(xiàn)了時間跨度范圍大的訂單數(shù)據(jù)、物流數(shù)據(jù)快速查詢;
3.定時導(dǎo)出明細數(shù)據(jù):實現(xiàn)了時間跨度范圍大的明細數(shù)據(jù)快速導(dǎo)出;
4.日志數(shù)據(jù)存儲:利用DorisDB動態(tài)分區(qū)特性,大量操作日志存儲于DorisDB,解決了日志類與業(yè)務(wù)類數(shù)據(jù)同時存儲在MySQL導(dǎo)致的性能下降問題。
DorisDB上線效果
未使用DorisDB前,我們一直使用MySQL處理所有數(shù)據(jù),包括了實時數(shù)據(jù)分析,技術(shù)部門經(jīng)常收到業(yè)務(wù)部門的系統(tǒng)提速訴求,上線DorisDB后,提速訴求已基本沒有,上線前后SQL查詢對比結(jié)果如下表:
綜上表所述,在引入DorisDB后,查詢速度得到明顯提升,目前生成環(huán)境使用至少10倍以上。
遇到問題及解決方案
1.SQL查詢GROUP BY:由于MySQL的sql_mode去掉了ONLY_FULL_GROUP_BY,轉(zhuǎn)移DorisDB測試過程中存在查詢報錯“SELECT list is not in GROUP BY clause and contains nonaggregated column”,修改已有SQL即可解決;
2.varchar長度問題:MySQL的長度以字符數(shù)計算,而DorisDB以字節(jié)計算,處理方案則是在生成創(chuàng)建DorisDB的SQL時,長度設(shè)置為原基礎(chǔ)上的2倍;
3.es外部表字符串部分顯示為null:DorisDB創(chuàng)建Elasticsearch外部表時,屬性參數(shù)enable_docvalue_scan默認為true,將其設(shè)置為false即可;
4.動態(tài)創(chuàng)建分區(qū)不支持時間戳int型字段:DorisDB動態(tài)創(chuàng)建分區(qū)支持date、datetime字段,目前我們將時間戳int型字段修改為datetime字段存儲,當然可以另外增加一列處理。
作者:林元猛,重慶格洛博技術(shù)負責(zé)人,負責(zé)產(chǎn)品技術(shù)實現(xiàn)、系統(tǒng)架構(gòu)設(shè)計等
榜單收錄、高管收錄、融資收錄、活動收錄可發(fā)送郵件至news#citmt.cn(把#換成@)。
海報生成中...