写点什么

StarRocks 在格洛博电商系统的应用实践

作者:StarRocks
  • 2021 年 11 月 19 日
  • 本文字数:1913 字

    阅读完需:约 6 分钟

重庆格洛博电子商务有限公司是一家专注于跨境贸易 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 字段存储,当然可以另外增加一列处理。

用户头像

StarRocks

关注

开源的新一代极速全场景MPP数据库 2020.08.08 加入

还未添加个人简介

评论

发布
暂无评论
StarRocks在格洛博电商系统的应用实践