AntDB 替换某省电信大数据平台的案例分享

news2024/11/17 12:26:10

亚信自研分布式数据库AntDB落地某省电信的案例分享

整体介绍

某省电信大数据分析平台,需要对BSS的三户、订单、实例等近10TB级的数据进行快速分析统计,每次分析的数据量最高达到5亿级别,同时需要向其它厂商开放这种实时的数据分析能力,前期这种数据分析是通过大数据平台Hadoop+Hive的框架进行支撑,但这种框架存在几个不足:1)需要hive脚本将BSS的关系型数据导入到大数据平台的文件中2)需要用Hadoop体系非SQL的MapReduce脚本进行统计,在技术实现上不满足数据分析能力的快速开放,在性能上不能实时返回统计分析数据,在“去O”的大趋势下,却又带来了新的难题与挑战。该省电信开始考虑新的数据库Postgres来支撑这种实时分析的场景,同时采用开源的Postgres-XL数据库集群,但在实际落地的过程中出现性能瓶颈,扩展瓶颈。

在今年8月中旬,CTC PaaS团队向客户推荐使用公司的AntDB3.1产品代替开源的Postgres-XL,并于8月底完成8个节点的部署,8个节点部署8主8从,在整个部署过程中,也向客户展现了AntDB一键化Oracle/MySQL数据迁移工具、在线不停机扩容、主从切换的产品核心能力,AntDB上线后,稳定运行至今,解决了前期遇到的所有性能及技术难题,稳定性与性能大幅提升,得到客户的高度认可,客户也承诺将AntDB产品纳入该省电信企业级PaaS平台的组件,将8节点扩展成32节点,将AntDB这样优秀的数据库能力提供给更多的系统进行使用,更好的支撑该省电信IT化建设。

项目实践

部署架构

该项目采用share-nothing架构,由10台X86服务器组成,采用4C8D1GTM的组网架构。

GTM/Datanode/Adbmgr通过流复制协议,全部实现一主一从的高可用环境。

复杂场景优化

AntDB在某省电信落地过程中得到快速认可,基本上解决了客户95%的分析场景,性能也超过了客户的预期,但一些比较复杂业务场景没有达到客户的期望,AntDB团队成员积极分析场景的SQL,对AntDB的内核以及SQL的写法进行了持续的优化,研发并支持一序列针对性能优化的新功能。

  • 继承表支持并行扫描
  • 支持多种方式的表连接并行
  • 集群计划支持union all
  • 集群计划支持cte+union all组合
  • 支持小表在集群内广播
  • 内核级+SQL级优化方式,满足客户亿级多表关联分组查询,秒级返回结果的需求

最终性能优化明显,最高的性能提升了190倍。

注:场景说明见下表

下面重点分析一下业务场景1/3/5/7

场景1案例分享

场景说明

该案例并不针对具体的业务场景,是从数据库层面为90%的业务场景提升10倍性能。继承表类似于oracle的分区表,在可管理性、高性能等方面,都为应用程序带来极大的优势。在AntDB3.1版本之前,只支持普通表的parallel seq scan。然而,在真实的业务场景里,普通表都会设计为配置类小表或数据量极小的复制表,并行不会带来性能上的优势,甚至会降低执行效率。真实的业务场景,超大表都会设计为继承表。因此,继承表支持parallel seq scan功能,实际上已经是AntDB3.1新版本发布的一种标准的出厂指标。

优化措施

优化前性能瓶颈优化措施
单进程顺序扫描继承表多进程并行扫描继承表

从内核层代码改造,支持分布式数据库 继承表的parallel seq scan。

执行时间对比

数据量:5千万单位:s
优化前8
优化后0.8
性能提升10倍

案例分析

该SQL 选择Parallel Nested Loop Left Join并行嵌套循环的连接方式,而基表的数据量是1.2 亿,loop的开销非常高。AntDB研发团队在制定该SQL的优化措施时,决定将并行hashjoin纳入AntDB3.1版本中,以替代nestedloop,提升该场景下的性能。

优化措施

优化前性能瓶颈优化措施
亿级数据量作为基表时,nestedloop开销非常高。集群计划支持hashjoin,当大表之间进行连接时,优化器选择执行效率更高的hashjoin

从内核层代码改造,支持分布式数据库 hashjoin并行。

执行时间对比

数据量:2千万 * 6单位:s
优化前190
优化后6
性能提升30倍

场景5案例分享

场景说明

该场景是报表统计类SQL,用于统计多种业务在某一天的新装用户数,按省/地市分组统计,部分业务允许指定条件过滤后汇总输出。

效果如下:

案例分析

该SQL 使用了cte+union all语法,在AntDB3.1版本之前,对该语法的支持还不够全面,因此,在该场景下选择了效率较差的pgxc的执行计划。

AntDB研发团队在制定该SQL的优化措施时,决定将cte+union all纳入AntDB3.1版本的集群计划中,以替代pgxc的执行计划,来充分利用集群计划的并行优势。

优化措施

优化前性能瓶颈优化措施
由于集群计划不支持cte+union all语法,优化器只能选择xc的执行计划,导致无法利用集群的parallel seq scan等并行能力。集群计划支持cte+union all,集群计划选择parallel seq scan+parallel hash join方式,充分利用分布式数据库并行计算的能力。

从内核层代码改造,分布式数据库的集群计划支持 cte+union all。

执行时间对比

数据量:2千万 * 6单位:s
优化前150
优化后3
性能提升50倍

场景7案例分享

场景说明

该场景是报表统计类SQL,用于统计多种业务在某一天的新装用户数,按省/地市分组统计,并指定多种开关类分组条件后汇总输出。

案例分析

该SQL 在进行group by 分组汇聚时,使用了多个维度,且分组字段均选择text数据类型,导致优化器估算出的分组数太多,从而无法利用parallel能力,而选择了seqscan。

分析该SQL,红框内的字段应该是bool数据类型,然而业务在建模时,选择了text数据类型。如果改成bool类型,对优化器在进行估算分组总数、从而确定最优执行计划选择时,大有裨益:

bool类型只有两种结果

char(1)类型不超过256种结果

text类型分组结果无限大

在对这3个字段的表数据进行统计后,的确只有0和1 两种数据。最终和业务侧确认,将字段类型由text修改为bool后,该SQL执行效率从 原254秒 将至 1.5秒。

优化措施

优化前性能瓶颈优化措施
业务侧表结构建模不严谨,没有结合实际情况选择合适的字段类型,导致在该场景下无法选择最优执行计划。和业务侧确认,修改字段类型。

执行时间对比

数据量:2千万 * 6单位:s
优化前254
优化后1.5
性能提升169倍

AntDB内核参数优化

在产品落地,性能优化过程中,除了优化不同场景下的SQL,也对AntDB的内核的参数进行了优化,增强了AntDB的健壮性,同时也增强了执行的效率。

结语

在去“O“及自主可控的大趋势下,AntDB数据库必将在更多的场景中得到更多的应用,当前AntDB更多地在数据分析统计的场景中展现它的魅力,鉴于AntDB的内核比Mysql更快更稳定,同时完美兼容Oracle语法,在中国电信集团研发中心主推基于Mysql的分布式数据库应用到核心业务系统的背景下,AntDB承载省级的核心业务数据是未来的努力目标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/655008.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java-API简析_java.util.Currency类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131255544 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

对象实例化空指针处理

1 问题 如何解决对象实例化空指针异常? 2 方法 首先创建一个package包,将其Menu类及相关代码放入其中,并在该package包下创建另一个类MenuItem,然后通过构造函数,写入需要运行的对象信息,最后在Menu类中用n…

leetcode 151. 反转字符串中的单词

2023.6.14 这道题全面考察了字符串的一些操作,这里我的思路是: 先对字符串进行空格去除操作,这里要注意一个细节:先用for循环去除连续空格,再用if判断开头和结尾的空格。再对没有异常空格的s 做一个反转操作。再对每一…

计算机网络基础知识(九)—— 什么是TelnetS?Telnet Over TLS

文章目录 01 | TelnetS02 | OpenSSL03 | 实现思路服务器处理流程客户端处理流程 04 | 代码实现服务端代码客户端代码编译过程 & 执行结果 前面学习了什么是HTTPS协议,了解了HTTPS的工作原理以及具体的工作流程,了解了HTTP协议和HTTPS协议之间的区别。…

SSM框架搭建

SSM环境搭建 1 IDE的话,我用的MyEcplise,如果用Ecplise的话,需要自行配置服务器。 首先,建一个Dynamic工程,需要注意的是一定要勾选上web.xml。 将Spring框架包、jstl包、standard包、common-logging包、aopallian…

系列十三、MongoDB聚合查询

一、概述 MongoDB聚合框架(Aggregation Framework)是一个计算框架,它可以: ①:作用在一个或者几个集合上; ②:对集合中的数据进行一系列的运算; ③:将这些数据转化为期望的形式; 从效果而言…

AIGC技术研究与应用 ---- 下一代人工智能:新范式!新生产力!(5 - AIGC 未来展望)

文章大纲 不可避免的职业替代AI 对人类思维的影响AIGC 的风险人工智能对齐 -- 价值学习 鲁棒适应参考文献与学习路径GPT 系列模型解析前序文章模型进化券商研报陆奇演讲多模态据预测,未来五年10%-30%的图片内容由AI参与生成,考虑到下一代互联网对内容需求的迅速提升,2030年A…

计算机网络管理 实验4(一) SNMP报文分析之验证SNMP协议的工作过程以及分析SNMP数据单元的格式

⬜⬜⬜ 🐰🟧🟨🟩🟦🟪(*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu &am…

FPGA基础知识-门级建模

目录 学习目标 学习内容 1.门的类型 2.门延迟 学习时间 学习小结 学习目标 学习Verilog 提供的门级原语 理解门的实例引用、门的符号以及andor,bufnot类型的门的真值表 学习如何根据电路的逻辑图来生成verilog描述 讲述门级设计中的上升、下降和关断延迟 …

【论文解读系列】Blip-2:引导语言图像预训练具有冻结图像编码器和大型语言模型

Blip-2 BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models BLIP-2:引导语言图像预训练具有冻结图像编码器和大型语言模型 (0) 总结&实测 总结:blip-2 最大的贡献在于,提出了…

跨境电商社交媒体:选择合适的平台

正如您在使用社交媒体的九种方法中了解到的那样,跨境电商优先考虑社交媒体营销可能会更有利可图。有数十个平台可供选择,每个平台都迎合了具有不同兴趣、特征和位置的独特受众。 那么您应该关注哪个社交媒体平台以及如何以最大效率工作? 目…

【Vue全家桶高仿小米商城】——(三)VueCli4.0安装和使用

文章目录 第三章:VueCli4.0安装和使用一、VueCli4.0安装:二、创建Vue项目方式一 使用脚本搭建方式二 使用UI界面搭建 三、安装依赖方式一 Vue脚手架图形界面安装方式二、命令行安装 四、Vue DevTools安装使用两种安装方式: 第三章&#xff1a…

Linux权限解析

一、Linux用户分类 Linux下有两种用户:超级用户(root)、普通用户 超级用户:可以再linux系统下做任何事情,不受限制 普通用户:在linux下做有限的事情。 超级用户的命令提示符是“#”,普通用户的…

6.6面向对象继承

2. 面向对象特征二:继承(Inheritance) 2.1 继承的概述 说到继承我们会想到什么 在Java面向对象程序设计中的继承,多个类中存在相同属性和行为时,将这些相同的内容抽取到单独一个类(父类)中,然后所有的类继…

【备战秋招】每日一题:4月15日美团春招第二题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第二题-分糖果 在线评测链接:P1236 题目内容 某天,塔子哥去商店买了两种不同口味的糖果,分别买了 a 个和 b 个。当他回到家时,他发现他…

IDE/以glog为例实践CMake-Gui工具使用

文章目录 概述构建glog编译glog.sln解决方案glog的配置项BUILD_SHARED_LIBSBUILD_TESTINGCMAKE_CONFIGURATION_TYPESCMAKE_INSTALL_PREFIXWITH_GTESTGTest_DIRWITH_GFLAGSgflag_DIRPRINT_UNSYMBOLIZED_STACK_TRACESWITH_SYMBOLIZEWITH_FUZZINGWITH_THREADSWITH_TLSWITH_GMOCKWI…

3分钟了解如何做好项目管理和协作

目录 介绍 什么是项目管理 项目管理三要素 时间 成本 质量 项目启动阶段项目启动负责人要了解四个问题 项目规划阶段 任务分解->任务优先级安排->计划呈现->风险控制 快速呈现项目工作计划 项目启动:信息同步任务分工高效 项目跟踪&#xff1a…

实战:用docker-compose容器化springboot项目

文章目录 前言技术积累docker-compose定义docker-compose文件参数docker-compose命令 实战演示1、创建挂载路径2、编写docker-compose.yml3、启动并管理容器 写在最后 前言 前面我们学习和实战了用dockerfile构建镜像,通过镜像可以任意在docker环境容器化部署项目。…

C++静态联编和动态联编

目录 2.1静态联编 2.2动态联编 2.3虚函数面试题 2.3.1构造函数中使用memset函数 2.3.2this指针与虚函数的调用 2.3.3构造析构函数中调用虚函数 2.3.4动态和静态联编与访问属性和默认值 2.3.5动态创建对象时的析构函数 联编是指计算机程序彼此关联的过程,是把…

Fiddler汉化成功

我安装的fiddler 操作系统是:Win10 64Bit 操作系统的版本号是:v5.0.20194.41348 for .NET 4.6.1 fiddler下载地址: 我用夸克网盘分享了「02-Web调试工具-FiddlerSetup.exe」,点击链接即可保存。 链接:https://pan.quar…