AI智能总结
AntDB融合数据库实时流数据处理引擎揭秘演讲人:亚信安慧-洪建辉 目录CONTENTS 010203 AntDB数据库发展历程AntDB流处理引擎内核揭秘案例:电信领域核心系统中的应用 亚 信 科 技-数 智 化 全 栈 能 力 提 供 商中国通信行业业务支撑系统软件服务于全国终端用户数量营业规模连年增长单位:人民币(亿元)近年来,亚信科技成功孵化出多个新业务主体,目前已形成“母公司+专业公司”的业务架构通信运营商业务BU非通信行业BU国际业务BU数智运营能源数智化信创基础软件物流数智化......亚信科技艾瑞数智亚信兴源亚信安慧亚信货云......13000+员工其中90%+为技术人员400+通信运营商客户1家70+能源客户家人员规模客户规模市场地位 10亿40+交通客户家 +201851.9260政务客户 201957.21+家 高可用、高性能第一代分布式AntDB3.x拥抱PostgreSQL生态拥抱MySQL生态AntDB4.x自研内存数据库第二代第一代首先应用于运营商核心计费系统核心业务全线覆盖,包括CRM/计费等移动/联通/电信的多个省份应用落地满足海量数据分析秒级业务响应的需求•最早一批投入国产数据库研发的企业•工信部技术创新单项奖•金融电子化金融业突出贡献奖•通过“可信数据库”性能专项评测A n t D B融 合 数 据 库 发 展 历 程•16年磨一剑•中国数据库技术引领者•通信行业隐形冠军亚信科技成熟下游生态赋能AntDB全系产品实践,AntDB是亚信科技全系产品的数据库底座 AntDB5.x原生代分布式架构(高度兼容Oracle特性)多模原生分布式数据库“全国首个”核心账交通行业省级数据中心项目落地•连续两年入选Gartner《中国数据库管理系统市场指南报•入选Forrester《中国数据管理生态系统导航报告》•荣获信通院2022大数据【星河】案例标杆优秀双料大奖•电信行业数据库产品能力测评通过•中国信通院数据应用创新实验室电信行业工作组“副组 A n t D B数 据 库 超 融 合 能 力为用户建立连接,融合6大数据应用需求能力AntDB-S流处理能力可 作 为 整 体 框 架 提 供 全 部 能 力,也 可 以 拆 分 为 独 立 模 块 AntDB-T交易型能力AntDB-TS时序型能力AntDB-V向量引擎能力AntDB-A分析能力AntDB-M内存计算能力 02 AntDB流处理引擎内核揭秘 RDBMSKafkaBatchApache StormSpark StreamingFlinkEDWLakehouseHadoopAppSQL数据大屏实时告警业务场景传统流式处理业务场景RDBMSStreaming DataAntDB流式实时数仓ProcessingSQLAntDB流处理颠覆50年未变的数据库内核RDBMSA n t D B流 式 数 据 引 擎-大 幅 简 化 架 构 , 大 幅 提 升 性 价 比 AntDB数据库SQL解析层SQL执行引擎事件处理引擎表结构存储与索引引擎流数据存储与索引引擎传统应用交易应用IoT应用监控应用交易查询报表分析实时报表告警推送传统业务实时业务create tableInsert intoUpdate tableSelect from数据生产端数据消费端Select from被动查询模式create streamCreate viewInsert intoSelect from主动推送模式S Q L语 法 与 传 统 数 据 库 全 兼 容, 提 供 流 式 处 理 与 推 送 能 力 D BD BA P PA P PP U S HP U L LS H A R I N GAntDB-S一体流式处理引擎全流程SQL处理实时物化视图A n t D B流 式 数 据 引 擎 是 如 何 工 作 的 ? 在AntDB数据库运行,提升针对核心系统性能需求数据流转更实时A n t D B流 数 据 库 特 性 优 势(一) >3倍处理引擎更简易 技术堆栈简化实时效率高传统业务逻辑设计分流处理消息汇总Java/Scala技术堆栈简化:一套技术栈,覆盖数据库应用中的各类场景。一体化的流处理数据库引擎,彻底将流式计算与传统交易、分析型数据存储进行了融合数据实时流转:原生支持流流关联与流表关联,打破流引擎与数据库之间的壁垒。SQL简易:数据在数据库内部,流对象和表对象之间自由流转,用户可以随时通过建立索引、流表关联、触发器、物化视图等方式,对数据进行处理及业务逻辑定制。A n t D B流 式 数 据 库 特 性 优 势 AntDB业务设计流程100%SQL定义实时推送自动触发 监控运维业务场景数据大屏实时告警接口驱动层ODBCC APISQL解析流处理语法PG语法SQL语句DDLDMLDCLDQL执行引擎PUSH模式查询流式窗口分析存储引擎流对象外部数据源扩展插件实时性能监控自动优化分析多维度关联分析SQL处理流式关联查询KafkaMySQLPostgreSQLOracleHDFSHBaseES接入服务文件......外部数据源A n t D B流 数 据 库 核 心 功 能 和 逻 辑 模 块 流式数据库是把流处理引擎的能力合并到数据库内核,与数据库SQL引擎、存储引擎融合在一起,完全以数据库的习惯使用流处理引擎,并且可以和数据库的功能混合使用。A n t D B流 数 据 库 功 能 架 构 拆 解 •接口驱动层面为了方便数据库用户快速切入流数据库,我们针对jdbc、odbc、libpq等接口驱动增加了实时数据推送功能并且完全兼容现有的接口。用户可以像使用传统数据库一样调用jdbc、odbc、libpq接口执行SQL语句使用流数据库。•SQL查询引擎层面增加了流处理特有的语法,对优化器以及元数据部分都针对流式处理做了相应修改。•执行引擎层面增加了PUSH模式大大的提高了流处理的实时性;流式窗口分析算子支持滚动窗口、滑动窗口、会话窗口;流式关联查询支持双流join以及流表join;异步屏障快照保证了流处理数据的精确唯一性;为流处理特殊设计的并发模型保证了流处理的性能。•存储引擎层面增加了流对象存储用于实时存储流数据;为保证流数据的完整性、一致性和正确性在流对象存储上增加了流约束;为了提高双流join的性能增加了流索引,增加外部数据源扩展插件用于读写多种外部数据源,以支持现有流式处理系统的生态,从而无缝替代现有的流式处理系统Flink等。 1、创建流对象3、推送流式数据处理结果2、插入数据benchmark=# CREATESTREAMinstructor1 (intime char not null defaulthlcnextval()ext, salary float);CREATE STREAMbenchmark=# CREATESTREAMsuper_instructoras SELECT * FROM instructorWHEREsalary>= 80000EMIT CHANGES;benchmark=# insert into instructor values('1001','john','dept1',57000);INSERT 0 1benchmark=# insert into instructor values('1001','tom','dept1',17000);INSERT 0 1benchmark=# insert into instructor values('1003','jack','IT',27000);INSERT 0 1benchmark=# select count(id),sum(salary),dept_namefrom instructor group bydept_nameemit changescount | sum |dept_name-------+-------+-----------2 | 34000 | IT1 | 87000 | IT12 | 74000 | dept1流 式 数 据 处 理 示 例 •滚动窗口(Tumbling Window)•滑动窗口(Hopping Window)流 数 据 窗 口 介 绍窗口操作是流式系统进行数据流处理的核心,通过窗口操作,可以将一个无限的数据流拆分成很多个有限大小的“桶”,然后在这些桶上执行计算。流式数据库提供了四种类型的窗口定义:滚动窗口、滑动窗口、会话窗口和全局窗口 •会话窗口(Session Window)⚫全局窗口全局窗口(GlobalWindow)只有一个窗口且窗口无限大,也就是无窗口定义,因为没有窗口结束时间所以不能等窗口结束后输出统计结果,一有数据立即计算输出结果。 语 法 解 析 过 程 把emit changes带 给 执 行 计 划PlannedStmt,把窗口类型、窗口长度、滑动步长、水位线、allowedLateness标志带给执行计划的Agg算子。流 式 窗 口 处 理 介 绍 SELECT expression [ [ AS ]output_name] [, ...][,WindowBegin() [[ AS ]output_name][,WindowEnd() [[AS]output_name]] ]FROMstream_name[ WHERE condition ]GROUP BYgrouping_element[[ { TUMBLE (event_time_field, <window_size> ) |HOP (event_time_field, <window_size>, <slide_size> ) }[ { WATERMARK | DELAY } <watermark_size> ][ALLOWEDLATENESS<allowedlateness_size>] EMIT CHANGES] | [EMIT CHANGES]<window_size> <slide> <watermark_size> are interval 'quantity unit' 流表join指的是一个流和一张或多张表join,流表join的结果也是流。SELECT [ * | expression [ [ AS ]output_name] [, ...] ]FROM {stream_name|table_name} [ [ AS ] alias ]JOIN {stream_name|table_name} [ [ AS ] alias ][ ONjoin_condition| USING (join_column[, ...] ) ][ WHERE condition ] [ EMIT CHANGES ]由于流是push模式获取增量数据,表是pull模式获取历史数据,执行器执行过程是先获取执行计划左子树再获取右子树,要实现流表join的效果是从流中获取一条tuple就在表中查找符合条件的tuple返回连接结果给上游节点实时推送给客户端,所以需要优化器生成计划树是保证流在执行计划树的最左叶子结点并且流表join的节点类型是NestLoop。流 表J O I N连 接 mydb=# explain select * fromsajoin ta on sa.id = ta.id join tb on sa.id = tb.idemit changes;QUERY PLAN---------------------------------------------------------------Nested Loop (cost=0.00..128.63 rows=6 width=52)Join Filter: (sa.id = tb.id)-> Nested Loop (cost=0.00..90.06 rows=1 width=16)Join Filter: (sa.id