More  

小編的世界 優質文選 資料

查詢速度提升10倍!StarRocks在格洛博電商系統的應用實踐


2021年11月15日 - 資料小編  
   

金融界20:21北京富華創新科技發展有限責任公司官方帳號,優質財經領域創作者

來源:南早網

  重慶格洛博電子商務有限公司是一家專注於跨境貿易B2C電子商務公司。格洛博早期主營互聯網行業海外流量服務及流量變現,2018年初開始主力運營綜合類商城網站,以客戶需求為導向,以誠信之道為根本,以優質服務為使命,以物惠全球為願景,為全球用戶提供多元化的互動式購物體驗,全方位打造B2C跨境電子商務綜合體。

  格洛博數據技術團隊基於StarRocks建立一個實時分析系統。生產環境引入StarRocks後,查詢速度得到明顯提升,較StarRocks上線前提升至少10倍以上。

  業務痛點及技術挑戰

  格洛博作為一家自研電商平台的電子商務公司,自主研發了廣告效果分析系統、訂單管理系統、供應商管理系統、采購管理系統、倉儲管理系統、物流管理系統等,多個系統各類明細數據篩選條件較多,實時數據自定義多維度分析報表較多,包括廣告數據分析、銷售訂單分析、供應商分析、采購訂單分析、庫存分析、物流分析等等。

  目前公司業務需求在技術實施過程中,由於業務增長較快,團隊研發能力無法快速跟上,大量業務依托於MySQL實現,主要存在技術難點如下:

  1.數據量大:業務明細數據較多,總體達10億數據以上;

  2.多表join:各類多維度分析報表較多,涉及多個大表join;

  3.實時分析:業務依據廣告效果投放,實時分析訂單變化,及時調整廣告預算;

  4.實時監控:動態監控下單流程行為,實時分析系統異常;

  5.日志數據:日志類與業務類數據同時存在於一體,沒有區分冷熱數據,導致MySQL性能下降。

  基於以上技術難點,我們期望尋找到可替代MySQL的數據庫,或建立一個OLAP實時分析系統,提供一套快速、穩定的實時數據服務。

  技術選型

  為解決實時分析的時效性,同時又能保證數據快速寫入查詢,先後調研了TiDB、ClickHouse、StarRocks,匯總如下:

  TiDB:一款定位於在線事務處理/在線分析處理(HTAP)的融合數據庫產品,可替換MySQL,但生產環境要求配置較高,同時替換現有的MySQL數據庫成本高。

  ClickHouse:一款開源的OLAP列式分析系統,可單獨部署不影響現有架構,面向大寬表,支持MySQL外表,但無法支持好多表join,同時現有的業務SQL也需要一定部分改寫,運維相對複雜。

  StarRocks:一款新一代極速MPP分析型數據庫,可單獨部署不影響現有架構,可多表join,實時數據查詢分析快,現有業務SQL基本無需改寫,支持MySQL外表,運維簡單,同時支持高並發、冷熱數據分離。

  綜上所述,決定使用StarRocks建立一個實時分析系統。

  數據同步

  如上圖所示,我們使用Canal+Kafka方式實時將MySQL同步到StarRocks。Canal是阿裏巴巴開源的一個Mysql binlog同步工具,通過Canal我們可以把Mysql的數據同步到Kafka,在Kafka中數據是用Json的格式生成的,然後用StarRocks的Routine Load方式消費Kafka數據同步到StarRocks。歷史數據通過創建MySQL外部表,使用INSERT SELECT方式導入到StarRocks。

  冷熱數據存儲

  實際使用StarRocks過程中,我們采用SSD/NVME+HDD實現冷熱數據分離存儲,SSD/NVME存儲今年數據,HDD存儲往年數據。同時StarRocks也支持冷熱數據自動遷移的功能,相關建表參數可參考storage_medium、storage_cooldown_time等。

  StarRocks在各場景中應用

  1.自定義多維度分析:業務人員自定義各種維度時,系統自動化動態多表join,通過查詢StarRocks快速響應查詢結果;

  2.多條件明細數據查詢:實現了時間跨度範圍大的訂單數據、物流數據快速查詢;

  3.定時導出明細數據:實現了時間跨度範圍大的明細數據快速導出;

  4.日志數據存儲:利用StarRocks動態分區特性,大量操作日志存儲於StarRocks,解決了日志類與業務類數據同時存儲在MySQL導致的性能下降問題。

  StarRocks上線效果

  未使用StarRocks前,我們一直使用MySQL處理所有數據,包括了實時數據分析,技術部門經常收到業務部門的系統提速訴求,上線StarRocks後,提速訴求已基本沒有,上線前後SQL查詢對比結果如下表:

  綜上表所述,在引入StarRocks後,查詢速度得到明顯提升,目前生成環境使用至少10倍以上。

  遇到問題及解決方案

  1.SQL查詢GROUP BY:由於MySQL的sql_mode去掉了ONLY_FULL_GROUP_BY,轉移StarRocks測試過程中存在查詢報錯“SELECT list is not in GROUP BY clause and contains nonaggregated column”,修改已有SQL即可解決;

  2.varchar長度問題:MySQL的長度以字符數計算,而StarRocks以字節計算,處理方案則是在生成創建StarRocks的SQL時,長度設置為原基礎上的2倍;

  3.es外部表字符串部分顯示為null:StarRocks創建Elasticsearch外部表時,屬性參數enable_docvalue_scan默認為true,將其設置為false即可;

  4.動態創建分區不支持時間戳int型字段:StarRocks動態創建分區支持date、datetime字段,目前我們將時間戳int型字段修改為datetime字段存儲,當然可以另外增加一列處理。(林元猛,重慶格洛博技術負責人,負責產品技術實現、系統架構設計等)

  大家在看