TDSQL PG版分布式关系型数据库,是一款同时面向在线事务交易和MPP实时数据分析的高性能HTAP数据库系统。面对利用业务产生的不定性数据爆炸需要,不论是高并发交易还是海量实时数据分析,TDSQL PG版都可能轻松解决。目前TDSQL PG版曾经在金融、保险、通信、税务、政务等多个行业的外围交易系统上线运行。
TDSQL PG版介绍
1. TDSQL PG版介绍
自2008年诞生,TDSQL PG版已有13年的倒退历史,产品全面兼容PostgreSQL,高度兼容Oracle语法,采纳无共享架构,在提供大型数据仓库解决能力的同时还能残缺反对分布式事务。此外,TDSQL PG版的三权(平安、审计、治理)分立平安体系也充沛满足企业对数据安全的需要。
TDSQL PG版具备六个方面的产品个性:
1.拜访接口丰盛。反对C/C++、jdbc/odbc、python等各种罕用语言接口。
2.扩展性良好。反对用户自定义存储过程、函数操作符。
3.MLS平安爱护能力。应用三权分立平安体系,反对数据通明脱敏加密。
4.高效HTAP能力。反对千万级TPS事务处理,全并行散布计算框架可高效实现OLAP计算。
5.弱小数据治理能力。反对高效在线扩缩容、用户无感知数据rebalance和冷热数据分级存储,节俭用户老本。
6.数据库个性丰盛。反对各种窗口剖析函数,高度兼容Oracle罕用函数和语法。
TDSQ PG版的利用场景满足以下业务特色,即:数据量上OLTP场景超过1T或OLAP场景超过5T;并发连接数超过2000,峰值业务100w/s;须要在线程度扩大能力,须要兼顾OLTP以及OLAP的HTAP场景,还须要严格的分布式事务保障。在满足这些业务特色的状况下,TDSQL PG版将会是适合的抉择。此外,TDSQL PG版也实用于地理信息系统、实时高并发零碎以及数据库国产化等场景。
语法差别比照
2. 语法差别比照
2.1 数据类型
Oracle中的许多数据类型都能够与TDSQL PG版互相对应。比方Oracle中的number数据类型,对应到TDSQL PG版里,能够用smallint、integer、bigint、numeric(p,s)等多种数据类型进行类比替换。但受底层存储的影响,smallint、integer、bigint的算术运算效率比numberic高,因而要视业务须要转换成对应的smallint、integer、bigint,如若无奈转换时才转换成numeric(p,s)。又例如Oracle中的float对应TDSQL PG版中的double precision,Oracle中的binary_float对应TDSQL-PG中的real,Oracle中的binary_double 对应TDSQL PG版中的double precision等,这些都是两者可对应的数据类型。
此外Oracle中也有局部特有的数据库类型如rowid,PostgreSQL中并没有,但TDSQL PG版对此做了兼容,增加了这种数据类型。又如urowid ID在Oracle中是可变长的字符存储,TDSQL PG版中则能够用varchar进行替换。
long、clob、blob等都是PostgreSQL中没有的数据类型。针对这些类型,TDSQL PG版做了大量兼容。如果用户须要在应用层用JDBC进行连贯,JDBC驱动也须要同步进行兼容革新。Oracle中的date类型也和PostgreSQL不同,Oracle中能够准确到时分秒,而在PostgreSQL中只有年月日。为了兼容这一数据类型,TDSQL PG版在Oracle兼容开关关上的状况下底层用户定义时写Date类型,但下方会转成Timestamp(0),能够间接准确到秒级。(Oracle兼容开关关上就是Oracle模式,不关上就是PG模式)。
2.2 存储过程语法差别
Oracle创立存储过程的语法与PostgreSQL有很大差别。比方用户在Oracle中创立存储过程,如果不须要输出参数、输入参数,则无需括号,但在PostgreSQL中则必须写括号,TDSQL PG版对此进行兼容,业务人员可依据需要抉择写或不写。在函数中,Oracle是从is开始,PostgreSQL是从as开始,TDSQL PG版两者都反对。PostgreSQL中,函数存储过程body应用$$进行封装,Oracle则不须要,TDSQL PG版两者都反对。Oracle反对“end存储过程名称”完结,PostgreSQL则不反对,对此TDSQL PG版做了兼容。存储过程中,Oracle应用“/”来结尾,示意该函数存储过程创立实现,但在PostgreSQL中则采纳language plpgsql,对此TDSQL PG版也做了兼容,用户能够用“/”进行结尾。
在变量申明过程中,PostgreSQL须要指定Declare申明一个变量,但Oracle不须要,TDSQL PG版则齐全兼容。存储过程中的输出、输入参数,Oracle反对IN、OUT和INOUT三种类型,但PostgreSQL不反对OUT,TDSQL PG版对此做了兼容,残缺反对IN、OUT和INOUT三种类型。在调用方面,Oracle存储过程的调用反对三种模式:call后加存储过程名称、exec后加存储过程名称、间接调用存储过程名称,而PostgreSQL中只能应用call进行调用,TDSQL PG版对此进行兼容革新,反对三种模式。
2.3 其余兼容性介绍
其余兼容方面,TDSQL PG版反对Oracle特有的package及200多个Oracle罕用的零碎函数。而Hint、Merge into语法、connect by语法、pivot行转列、unpivot列转行、分区表ddl加强、dual伪表、rowid、rownum、sysdate、systimestamp,这些在Oracle中罕用的语法和函数,TDSQL PG版都能够兼容。
此外,目前TDSQL PG版也反对通过dblink去拜访Oracle中的数据、select字段别名不须要as润饰、update 别名反对、insert all语法同时插入多个表、特有的分页查问语法、只读事物中要获取序列等。
传统数据库架构瓶颈
3. Oracle兼容能力
3.1 分区表能力
TDSQL PG版反对range、list 、hash 、高性能等距离分区,并且能够实现多级分区级联,在分区表的拜访办法上全面兼容Oracle语法,除能够间接拜访子表外,还反对带父表关联子表拜访。同时TDSQL PG版也反对update分区字段的值。以下图为例,0-30范畴的子表中的id分区键的值通过update将其改为50时,因为50大于30,零碎会主动将批改后的数据退出到30-60范畴的子表,而删除0-30范畴子表中的旧数据。TDSQL PG版还具备分区子表合并拆分能力及新加分区时default分区主动挪动的能力。
3.2 分区子表合并&拆分
随着工夫的推移,在应用过程中,零碎中的分区会越来越多。为方便管理,很多用户在晚期想将分区进行合并,TDSQL PG版也像Oracle一样提供了分区子表合并的能力。如图中右边所示,通过merge partitions 202001和 202001的分区,造成新的分区,能够无效缩小分区数量,便于管理。
如果常常拜访的热点数据所在分区内数据过多,就容易扫描到很多不必要的数据,这时可将分区进行拆分。如图中左边所示,将热点分区0-60范畴分区split拆分,后续拜访热点数据50时就只需扫描30-60范畴的分区,能够无效缩小数据扫描,进步查问效率。
具体的实现形式为:merge时数据库底层会新建一个分区,将指定要合并的分区数据全面迁徙,再删除旧的分区。Split时,数据库底层会创立出新的2个分区,将旧分区的数据依照大于/小于拆分点进行划分,别离插入不同的新的小分区,再删除旧分区。
3.3 Default分区数据保护
分区表中个别会有一个默认的default子分区,用于存储不属于其余子分区的数据。比方在下图中,2019年12月、2020年3月的数据,都不属于已有的2020年1、2月的分区,因而这些数据会主动放在default子分区中。如果后续用户新创建了2020年3月的分区,TDSQL PG版能够像oracle一样,主动将属于2020年3月的数据从default子分区迁徙到新分区中,在default子分区中就只剩2019年12月的数据。整个过程中用户齐全无感知,只须要创立分区,TDSQL PG版外部会主动进行迁徙。TDSQL PG版底层具体的实现办法:扫描default分区表,将满足新分区的数据插入新分区,删除default分区表中这些数据。
3.4 存储过程/函数扩大语法能力
为全面兼容oracle,TDSQL PG版的存储过程和函数在创立调用语法上也进行了适配,除后面提到的函数体不须要$$突围、以/结尾、空参数不须要括号等细节外,TDSQL PG版还反对在任意的statement语句、block代码块前增加label标签,再goto跳转到指定的标签,而原生PostgreSQL只能在循环前加label。实现形式是将执行指针cur被赋值为label所在位置,再从label所在的地位持续往下执行。
3.5 WITH FUNCTION语法反对
除了储过程,TDSQL PG版还对存储函数进行了扩大,比方在函数上增加了对WITH FUNCTION语法的反对。以下图为例,select调用的add function函数只在此语句中无效,其余语句有效。如果零碎中曾经有同名函数,这个select语句中的WITH FUNCTION的优先级会高于其余同名函数。实现形式为:函数编译后不存入pg_proc,存入Query的构造体中,随着query的清理而被清理;考察时优先查找Query带的function,没有找到再查pg_proc。
3.6 PACKAGE
Oracle中Package比拟常见,用户罕用的函数大都存储在Package中。目前TDSQL PG版也反对Package,用户能够将自定义的罕用函数封装到Package中,应用时指定Package来调用对应函数。具体的实现形式是:在创立package时后盾会创立一个对应的schema和外面的函数(函数内容为空),创立包体的时候指定函数内容时再去alter function,包里的变量都放在schema上面,可参考PL实现PL中的变量性能。删除时则是先删除包体再删除包。
3.7 ROWID & ROWNUM
ROWID和ROWNUM都是Oracle特有的语法,PostgreSQL并不反对,TDSQL PG版对此进行兼容革新,反对ROWID和ROWNUM。
两者的区别在于:ROW ID的兼容实现是在用户建表时,指定该表是With ROWID。后续查问就能够查问到ROWID具体的值,ROWID相当于惟一标识,在用户写入阶段会从本地SEQUENCE获取惟一ID值再加上分布式的nodeid进行填充,写入到用户数据文件中。ROWNUM的实现是做完过滤和投影后CN返回给用户时增加的一个编号,在用户最初返回阶段进行增加。
3.8 MERGE INTO
Merge into能够将两个表进行合并。以下图为例,指标是Merge到Test1中,但参考Test2的数据。如果能匹配上,就批改Test1里的数据,使数据与Test2的记录统一,如果不匹配,就把Test2的数据插入到Test1中。最终执行的成果相似于Test1合并了Test2,将Test2中的数据Merge到Test1中。在实现过程中,TDSQL PG版增加了merge算子,在Query构造体中新增了
int mergeTarget_relation;
List* mergeSourceTargetList;
List mergeActionList; / list of actions for MERGE (only) */
3.9 Start with connect by
语法解析反对connect by查问。在解析时通过函数make connect by stmt将select stmt改写为通过递归CTE查问来实现start with connect by档次查问子句。后续通过TDSQL PG版本身反对的递归CTE语句来执行。
3.10 PIVOT & UNPIVOT
Pivot能够将行数据转列属性。语法:
PIVOT '(' target_el FOR columnref IN_P '(' pivot_expr_list ')' ')'
TDSQL PG版实现办法是将不再target_el以及columnref中的列作为group by列,通过pivot_expr_list对target_el中的汇集函数参数用case when进行重写,规定是“有值取值、没值取空”。
UNPivot能够将列属性转行数据, 实质是转化为 join lateral。实现办法是获取IN中的列,拼接成VALUES(…),将UNPIVOT column和FOR column拼接成VALUES的别名,将查问中FROM前面的其余表与value rte表做 join lateral。
3.11 其余兼容能力
此外,TDSQL PG版反对Oracle中的日期、工夫、字符串、表达式等罕用函数。目前TDSQL PG版能够兼容98%以上的运营商、保险行业罕用Oracle语法,兼容85%以上的银行机构罕用Oracle语法,无效升高传统IT企业的国产化及信创门槛。
Oracle to TDSQL PG版迁徙
4.1 迁徙工程面临问题
从Oracle到TDSQL PG版的迁徙过程会波及到四个问题:一是老本高且工作量大;二是迁徙技术简单;三是兼容水平不明确;四是迁徙过程无标准化流程,突发问题频繁。咱们将上述问题分门别类,逐个进行解决。
针对工作量大的问题,能够通过TDSQL PG版提供的繁难自动化迁徙平台,下发一个迁徙工作即可解决;针对迁徙技术简单的问题,咱们会为用户提供业余的技术支持,帮助用户进行迁徙;针对兼容水平不明确的问题,咱们会在迁徙过程中进行评估,生成评估报告来阐明兼容水平;针对迁徙过程无标准化流程的问题,咱们会在每一步都输入相干文档、报告来进行迁徙,促使流程标准化。
4.2 迁徙工具技术架构
TDSQL PG版迁徙工具的技术架构,分为数据抽取模块和数据装载模块。数据抽取模块会从源库外面抽取,实时导出用户数据。数据装载模块会在指标库里进行实时数据写入,进行数据迁徙。
针对局部语法不能齐全兼容的问题,咱们会进行语法转换,把数据传递到数据装载模块,数据装载模块会间接实时写入到指标库中。迁徙过程中,监控模块会实时监控整个迁徙工作,期间会输入兼容报告,迁徙完后进行数据校验。
4.3 兼容性评估
兼容性评估会输入两个报告:对象兼容报告和利用兼容报告。对象兼容是指数据库的对象,如表、索引、视图、函数或数据类型等信息;利用兼容次要是指前端应用层发送给源端执行的SQL。咱们会针对这两方面输入兼容报告。
4.4 兼容性评估报告
对象兼容报告,分为三种色彩:蓝色代表齐全兼容,不必做任何革新就能够将Oracle中对象在TDSQL PG版中进行应用;绿色代表外部转换,针对Oracle的应用语法或类型,工具会主动转换成TDSQL PG版中适配的语法和类型,从而进行迁徙;红色代表不能转换,齐全不兼容,须要用户人工接入。
4.5 迁徙全流程介绍
整个迁徙流程可分为四个环节。首先是利用开发适配和生产环境筹备。在进行利用开发适配过程中,能够并行地进行生产环境的零碎布局,调验原先的零碎布局。其次是零碎测试环节,将原先在Oracle中的存量、增量数据全副迁徙过去进行测试验证,蕴含性能验证和性能验证。
验证完后到双轨制上线环节,相当于老零碎和新零碎同时并行运行。正式上线投产后,再依据用户需要判断是否须要将TDSQL PG版中的数据同步到老零碎中。这个过程须要和用户共同完成,图中绿色局部是须要用户配合的局部,蓝色局部则是咱们负责的局部。
4.6 双轨运行计划
下图是咱们的双轨运行计划,图中有两个架构,别离是Oracle To TDSQL PG版和TDSQL PG To Oracle。
业务上线后期,咱们采纳双轨运行,反对从Oracle到TDSQL PG版以及从TDSQL PG版到Oracle的数据同步。通过业务开关,用户能够依据需要,抉择将局部业务放在原有零碎或将另一部分业务放在新零碎,也能够抉择全副放在新零碎或老零碎。当双轨运行继续稳固后才会进行正式上线。双轨制运行相当于过渡环节,如果有问题,用户能够升高回退到以前的零碎上,给数据减少了双层爱护。当然,双轨制运行的过程相应地也会更加简单。
TDSQL PG版起源于技术成熟、功能强大的PostgreSQL,在此基础上腾讯云数据库结构和发行了性能更丰盛、稳定性更好、兼容性更广、安全性更高、性能更强、扩展性极好的分布式数据库TDSQL PG版产品。
腾讯公司对TDSQL PG版具备齐全自主知识产权,实现平安可控, 具备在中高端市场规模化代替国外数据库的能力,在数据库根底软件层面无力撑持了国家平安可控策略倒退。以后TDSQL PG版曾经在金融、保险、通信、税务、公安、消防、政务等多个行业的外围交易系统上线运行,为泛滥行业客户提供优质服务。