PolarDB IMCI助力聚水潭数据中台极致体验,实现百亿级订单实时分析

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
简介: 聚水潭成立于2014年,以电商SaaS ERP切入市场,凭借出色的产品和服务,快速获得市场领先地位。

1.前言


聚水潭成立于2014年,以电商SaaS ERP切入市场,凭借出色的产品和服务,快速获得市场领先地位。发展至今,聚水潭已对接300+线上平台渠道,服务商家超80万,2020双11季全网处理订单总量达8.52亿,现在,全国电商每发出5-6个包裹中就有1个来自聚水潭系统。


当前,聚水潭使用的阿里云数据库实例超2000个,这些实例用于以SaaS ERP为核心的胜算、聚货通、云会计、淘跟单、聚工单等聚水潭全系列业务中,产品包括OLTP的PolarDB MySQL、RDS MySQL、SQL Server等,用于OLAP分析的ADB MySQL和ADB PG,通过产品和方案组合来满足聚水潭在电商SaaS ERP业务下的各种需求。

1.JPG

聚水潭架构图


2022年双11前夕,聚水潭数据平台产品部协同ERP、分销事业部重磅推出数据中台产品矩阵,满足商家日常经营分析需求的同时,为大促带来了更实时、全景的决策能力。在刚刚结束的大促季,数据中台产品服务商家有数万家,支持了十亿级商品、百亿级订单明细的查询分析需求,这背后离不开阿里云原生数据库PolarDB及其新特性IMCI(In-Memory Column Index,列存索引,下简称IMCI)的能力加持,带来极致稳定的商家查询体验的同时,也帮助聚水潭沉淀了宝贵的技术架构资产。


接下来我们就数据中台业务场景及PolarDB IMCI相关的特性展开介绍。


2.数据中台的产品能力


疫情三年,对电商零售行业产出了广泛影响,作为零售服务商的聚水潭嗅到了其中产业数字化升级的大好机遇,聚水潭数据团队开始了数据中台产品的设计和开发,相比数据报表,数据中台需要让商家更容易洞察到销售、渠道、直播、商品、物流、售后等不同业务场景核心数据的分布、趋势、关系异常,从而快速定位问题,提高内外部协同和决策效益,其中数据大屏、发货预警产品为商家提供了秒级实时的业务体验,出于极致性能及快速迭代的诉求,初期选购了阿里云原生数据库PolarDB来提供在线读写服务。


2.1 实时大屏

秒级更新的数据大屏可以说是企业经营管理层的驾驶舱,可以直观、全面的了解到每天的销售、发货情况,同时可以更快、更精准地发现问题,防控风险,提高管理的时效性。

2.JPG

数据中台大屏 示意图


2.2 发货预警

除了数据大屏看,发货预警同样收获商家的点赞,在这里商家可以看到整体的发货进度和不同发货仓今日、昨日支付未发货的订单情况,点击【更多发货分析】后可以进一步跳转进入【物流实时预警】模块。

3.png

发货预警 示意图

业务部门利用【物流实时预警】功能,快速定位发货和揽收快超时、物流信息未更新等或有赔付风险的订单,内外部及时沟通协调,以保障好峰值几十万订单的顺利发出,预防资损。商家反馈依靠这个功能,减少了不少的平台的延迟发货处罚。

4.png

物流实时预警 示意图

5.png

赔付风险订单预警 示意图

更多主播、售后、商品、合作商家的功能就不一一展开了,关于产品的介绍及商家使用反馈可移步《双11,他们都在聚水潭数据中台里看什么?》


3.数据中台是如何使用PolarDB IMCI的?


伴随产品功能迭代及数据安全要求的升级,业务场景在简单的聚合指标查询的基础上增加了商品、订单级别的明细多维分析,在选型的多款OLAP产品中,PolarDB IMCI以其极致性能、灵活弹性、简单易用等特点脱颖而出。


3.1 PolarDB IMCI的技术特点

IMCI是In-Memory Column Index的缩写,是在已有MySQL行存表Btree索引的基础上,扩展列存形式的索引,从其名称中也不难看出,行列索引共享了基础表的数据,从而让普通的MySQL表具备了同时支持行列场景的查询需求,可以称得上是行列共存表,列存索引特性在PolarDB MySQL引擎中的功能架构图如下:

6.JPG

列存索引特性在PolarDB MySQL引擎中的功能架构图

从以上架构图可以看到,PolarDB MySQL引擎从存储引擎、执行算子、优化器三个层面设计了列存索引的特性:


  • 存储引擎:支持实时事务级别一致性的行列混合存储;
  • 执行算子:面向列存的向量化并行执行算子,支持极速的单表和多表查询;
  • SQL Parser/优化器:面向行列混合存储的CBO优化器,可以根据代价自动选择行存或者列存执行查询请求;


在此架构下,是的原有PolarDB MySQL具备如下优势:

  • 100%兼容MySQL:列存具有与MySQL一致的数据类型系统,支持灵活的类型转换,100%兼容MySQL协议;
  • 极致的HTAP性能:PolarDB在OLTP方面本身具备极致性能。列存索引使其OLAP性能也与专用的OLAP数据库系统处于同一水平;
  • 行列混合存储,降低成本:同时支持行存储和列存储两种格式,且实时保证行列的事务级一致,同时,列存更具有低成本的优势。

3.2 基于PolarDB IMCI的数仓架构

聚水潭数据中台产品的开发和实时数仓的演进是同步进行的,借助PolarDB,逐步形成了Flink+PolarDB的实时数仓架构。

7.png

聚水潭实时数仓架构图

从上图中不难发现,采用一套统一的PolarDB的同时支持了简单的读写事务型SQL和OLAP复杂聚合查询,事务型SQL路由在普通行存节点,分析型SQL运行在更适合做分析型查询的列式索引上,使得查询速度获得数个数量级的提升。同时利用了PolarDB读写分离、RO节点灵活扩展的优势,为系统设计带来诸多优势,如:


1. 资源隔离:复杂的OLAP查询与RW节点完全的资源隔离,OLTP和OLAP的请求互不受影响。

2. 自动分离:PolarDB提供的自动SQL分流功能,自动的将复杂查询指向分析型只读节点,业务无需手动对OLTP型SQL和OLAP型SQL进行手动分流。

3. 提效降本:读写节点共享存储,一份数据消除了主备延迟,同时支持OLTP+OLAP的业务,做到了成本最优。

这些能力帮助数据研发团队极大的提升研发速度,从而助力产品的快速迭代。


3.3 PolarDB IMCI是如何支撑百亿级的订单分析?

对于PolarDB IMCI到底提升了多少性能,以销售主题-分析商品销售金额的真实生产案例来说明,同时看下IMCI是如何做到单表模式支持HTAP混合负载的?场景1:查看单商品全渠道的销售金额

SELECT  sku_id
        ,max(sku_name) sku_name
        ,sum(order_item_amt) order_item_amt
FROM    (
            SELECT  sku_id
            ,sku_name
            ,order_item_amt
            FROM    ads_jst_erp_dataportal_shop_sku_detail    --店铺自营商品售后指标表
            WHERE   co_id = $coId
                #if($startDate && $startDate != '')    -- 开始时间&结束时间
                    AND biz_date >= '$startDate' 
                #else
                    AND biz_date >= date_add($globalTime ,interval - (replace('$statisticsPreriod','d','') - 1) DAY) 
                #end
                #if($endDate && $endDate != '')
                    AND biz_date <= '$endDate'
                #else
                    AND biz_date <= $globalTime
                #end
                #if($skuId && $skuId != '')    -- 商品编码
                    AND sku_id LIKE '%$skuId%'
                #end
                #if($skuName && $skuName != '')    -- 商品名称
                    AND sku_name LIKE '%$skuName%'
                #end
         ) temp_sku_data
GROUP BY sku_id
;


场景2:店铺、平台、商品、款、统计日期等多维度统计销售金额


SELECT  sku_id
        ,max(sku_name) as sku_name
        ,sum(order_item_amt) order_item_amt
FROM    ( 
             SELECT  sku_id
                    ,sku_name
                    ,sum(order_item_amt) order_item_amt
             from    ads_jst_erp_dataportal_shop_sku_detail    --店铺自营商品售后指标表
             WHERE   co_id = $coId 
             #if($startDate && $startDate != '')    -- 开始时间&结束时间
                     AND  biz_date >= '$startDate' 
             #else
                     AND  biz_date >= date_add($globalTime ,interval - (replace('$statisticsPreriod','d','') - 1) DAY)
             #end
             #if($endDate && $endDate != '')
                     AND  biz_date <= '$endDate' 
             #else 
                     AND  biz_date <= $globalTime #end #if($authShopIds && $!authShopIds != '')    -- 多个渠道
                     AND  shop_id IN ( #foreach($authShopId IN $authShopIds) $authShopId,#end - 999) 
             #end
             #if(($shopIds && $shopIds != '') |  | ($platforms && $platforms != '')) 
                 and  (
                                  1 = 0
                                  #if($shopIds && $shopIds != '')
                                      OR  shop_id IN ( #foreach($shopId IN $shopIds) $shopId, #end - 999)
                                  #end
                                  #if($platforms && $platforms != '')
                                      OR  platform IN ( #foreach($platform IN $platforms) '$platform', #end '-999')
                                  #end
                                  )
             #end
             #if($skuId && $skuId != '')    -- 商品编码
                AND  sku_id LIKE '%$skuId%'
             #end
             #if($skuName && $skuName != '')    -- 商品名称
                AND  sku_name LIKE '%$skuName%' 
             #end 
          ) temp_sku_data
GROUP BY sku_id
;

店铺自营商品销售金额多维分析SQL样例

对于第一个场景通过增加组合索引的方式可以满足,但是对于第二种场景,要枚举支持各类型的查询条件,初步预估都需要不小于10个索引,况且这里还提供了类似<、>、like等谓词,此场景下,传统的MySQL Btree索引就无法支持了。此时PolarDB IMCI给出了答案,让我们直接看表结构:

CREATE TABLE `ads_jst_erp_dataportal_shop_sku_detail` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `biz_date` varchar(15) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '业务日期(yyyy-mm-dd)',
  `co_id` int(11) DEFAULT NULL COMMENT '商家编号',
`shop_id` int(11) DEFAULT NULL COMMENT '店铺编号',
  `shop_name` text COLLATE utf8mb4_bin COMMENT '店铺名称',
  `platform` varchar(15) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '平台',
`sku_id` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '商品编码',
  `sku_name` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '商品名称',
  `order_item_amt` decimal(38,6) DEFAULT NULL COMMENT '今日确认退款金额'
  PRIMARY KEY (`id`),
  KEY `idx_co_sku_bizdate` (`co_id`,`sku_id`,`biz_date`),
  COLUMNAR INDEX (`id`,`biz_date`,`co_id`,`shop_id`,`shop_name`,`sku_id`,`sku_name`,`platform`,`order_item_amt`)

店铺自营商品售后统计指标表

使用列存索引后SQL查询性能提升超过100倍,同时借助PolarDB Proxy节点的智能路由能力,OLAP查询可以自动路由至PolarDB IMCI节点并选择列存索引执行SQL,做到了OLTP和OLAP架构一体化的体验。

8.JPG

9月底,聚水潭数据中台产品正式对外售卖,通过PolarDB IMCI对MySQL 100% 兼容,帮助产品快速实现产品商业化,满足了数据中台产品的稳定性和时效性的要求,在满足产品功能快速迭代的同时,实现的功能复杂度越来越高,头部商家动辄数千万的销售订单,对营收/发货/退款等售卖情况进行分析涉及到对大量订单条目的扫描聚合关联分析等,对这些数据的快速处理很快遇到挑战:


1. 数据量巨大,达到100亿级别,普通的MySQL表索引遇到瓶颈;

2. 单个OLAP查询需要执行T级别的数据,势必会消耗大量CPU和IO资源,伴随出现了不同商家的查询干扰问题等;


过程中通过PolarDB IMCI帮助数据中台、报表架构实现了统一,和ADB系列产品形成有力组合,最终实现了PB级别实时数仓的OLTP+OLAP的一体化架构。


随着售卖客户的增加及大促的临近,PolarDB共享存储一写多读的架构再次发挥了极大的作用,垂直弹升RW,增加只读节点的操作都可以在分钟级完成。让聚水潭在双十一大促期间,沉着应付100+倍级别的流量增加面临的系统压力风险。同时,聚水潭是服务2B的业务,存在明显的波峰浪谷特性,PolarDB产品的分时弹性能力在业务低谷时将节点资源进行弹降,在业务高峰前将资源进行弹升,保障了业务查询需求,也降低了资源的持有成本,从而整体上提高了资源的使用率。


最后,引用数据中台技术架构师溪竹对于当前架构的几点总结:


1. 架构创新:Flink+PolarDB升级实时数仓新引擎,支持百万级商家全渠道数据实时分析;

2. 降本增效:统一HTAP架构,OLTP+OLAP混合负载,助力数据中台产品快速迭代;

3. 安全可靠:资源分时弹性,业务读写分离,共享存储+多读节点高效实现场景隔离。


 / End /  

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
1月前
|
SQL 存储 监控
|
1月前
|
监控 关系型数据库 MySQL
|
1月前
|
存储 关系型数据库 分布式数据库
突破大表瓶颈|小鹏汽车使用PolarDB实现百亿级表高频更新和实时分析
PolarDB已经成为小鹏汽车应对TB级别大表标注、分析查询的"利器"。
突破大表瓶颈|小鹏汽车使用PolarDB实现百亿级表高频更新和实时分析
|
1月前
|
SQL 监控 安全
|
1月前
|
关系型数据库 MySQL 分布式数据库
数据库专家带你体验PolarDB MySQL版 Serverless的极致弹性特性
作为数据库专家,我有幸带大家深入体验阿里巴巴自主研发的下一代关系型分布式云原生数据库——PolarDB MySQL版的Serverless极致弹性特性。在这个云原生和分布式技术飞速发展的时代,Pola
|
19天前
|
存储 SQL Oracle
主流关系型数据库存储架构层的差异分析
主流关系型数据库存储架构层的差异分析
|
2月前
|
关系型数据库 Serverless 分布式数据库
【PolarDB 开源】PolarDB Serverless 模式:自动扩缩容与成本效益分析
【5月更文挑战第25天】PolarDB Serverless 提供自动扩缩容功能,适应动态工作负载,降低成本。在业务高峰期增加资源保障性能,低谷期减少资源实现成本优化。通过对比传统模式下的成本浪费,示例说明了Serverless如何节省开支。代码演示了连接与查询PolarDB Serverless数据库的基本操作。要充分利用该模式,需合理规划业务、监控性能并结合其他云服务。PolarDB Serverless是弹性、经济的数据库选择,未来将持续创新,助力企业高效发展。
383 1
|
2月前
|
关系型数据库 分布式数据库 数据处理
【PolarDB 开源】PolarDB 在大数据分析中的应用:海量数据处理方案
【5月更文挑战第25天】PolarDB是解决大数据挑战的关键技术,以其高性能和可扩展性处理大规模数据。通过与数据采集和分析工具集成,构建高效数据生态系统。示例代码显示了PolarDB如何用于查询海量数据。优化策略包括数据分区、索引、压缩和分布式部署,广泛应用于电商、金融等领域,助力企业进行精准分析和决策。随着大数据技术进步,PolarDB将继续发挥关键作用,创造更多价值。
182 0
|
11天前
|
存储 SQL Oracle
|
7天前
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。

相关产品

  • 云原生数据库 PolarDB