一、背景
在信创“自主可控”的浪潮下,政企行业首当其冲,基于国产化信创的要求,本部门某业务后端应用也需要针对分析开源组件的风险和开源协议的商业应用限制;能用国产化替代的评估后尽可替代割接,本期针对传统数据库Mysql向达梦数据库迁移的记录。
相关资源:达梦官方文档、达梦在线服务平台、墨天轮排行榜、IDC数据报告、数据报告、洞见研报
二、数据库现状
无论什么样的数据库都离不开数据库本身定义的作用,即它是一套承载相互有关联关系的若干数据的集合,负责组织、存储和管理数据的仓库,一般由一个数据库管理系统(DBMS)来控制。数据库按照不同维度,分类方法多种多样,按数据结构可分为关系型数据库和非关系型数据库(NoSQL数据库、NewSQL数据库等);按设计架构可分为单机数据库、集中式数据库和分布式数据库。按部署方式可分为本地部署和云部署,按应用场景/功能可分为事务性数据库(OLTP)、分析型数据库(OLAP)以及混合型关系数据库(HTAP),还可按商业模式分为开源数据库和商业数据库(闭源)。
国内数据库的发展,传统厂商多采用集中式设计架构,以达梦、人大金仓、南大通用、万里开源为代表,而新兴厂商则利用分布式进行换道超车,以PingCAP、巨杉数据库、星环等初创企业为代表,随着数据库云化部署大势所趋,云厂商则兼顾了前2者,但也主要是以分布式为主,分布式数据库是通过计算机网络将物理分散的多个数据库单元连接组成的逻辑上统一的数据库;目前分布式数据库的技术路线分为三类:分库分表+中间件方案、共享存储分布式数据库、去中心化的分布式数据库。国内数据库市场,关系型数据库市场占比90%左右,这些年非关系型正在逐年上升。国产供应商主要代表有华为、阿里、达梦、人大金仓等,这4家合计占据约30%份额,根据IDC数据,截至2022年末,在国内关系型数据库中,公有云数据库的市场中以阿里云、华为、腾讯为代表的国产数据库厂商份额已远超海外数据库厂商。
2024年2月国内数据库排行榜:
三、达梦数据库
3.1、产品介绍
当前官网最新版本为DM8,相较于目前主流产品架构:不同特性依靠不同内核去实现,DM8独特采用了双存储引擎架构,行存储引擎和列存储引擎可相互配合、协同工作。同时实现了计算层和存储层的分离,同一内核既支持共享存储式集群,也支持分布式事务集群。达梦数据库采用分布式架构,可由多个节点组成,每个节点可以处理多个用户的请求,从而并发性能较好。达梦数据库目前已广泛应用于各种领域,包括金融、电信、政府、教育、医疗等。
产品特性:
3.2、产品架构
达梦数据库采用多层架构,包括物理层、网络层、应用层和数据层。逻辑架构分为:统一接口层、应用集成数据层,物理层。其中,在应用层它采用了多级缓存机制,包括内存缓存、文件缓存和磁盘缓存。内存缓存可以提高系统的响应速度,文件缓存可以提高数据的读取速度,磁盘缓存可以提高数据的存储速度。另外它支持多线程和多节点部署,提高并发和可靠性。DM 数据库为数据库中的所有对象分配逻辑空间,并存放在数据文件中。所有的数据文件组合在一起被划分到一个或者多个表空间中,所有的数据库内部对象都存放在这些表空间中,表空间又被进一步划分为段、簇和页(也称块)。
架构说明:
- DM 数据库实例:从DM7 以及之后版本的数据库中,“数据库”和“实例”这两个概念之间出现了很大的差别,实例类似oracle定义,它是由一组正在运行的 DM 后台进程/线程以及一个大型的共享内存组成。实例是操作DM 数据库的一种手段/工具,是用来访问数据库的内存结构以及后台进程的集合。
- DM 数据库:也类同Oracle,它指磁盘上存放在 DM 数据库中的数据的集合,一般包括:数据文件、日志文件、控制文件以及临时数据文件等。
- DM逻辑存储结构内部如下:其中,页(数据页,也称数据块)是数据库中最小的单元,它是将簇进一步划分得到的逻辑页(块),DM 数据库中默认每个页默认 8KB(可以自定义大小,比如:4KB、8KB、16KB 或者 32KB;另外区别于文件系统的页,那个是为了跟内存交互使用,文件系统的内存页通常是 4K),页大小一旦创建好数据库后,则在该库的整个生命周期内,页大小都不能够再改变。一个簇由多个连续的页组成。(区别OS里的簇/块是操作系统中最小的逻辑存储单位,文件系统的默认分配单元大小(簇)也是4096字节);对于上层的逻辑簇,它可以来自不同的数据文件,它由数据文件划分,每个簇的大小是 128K(16 个连续的页,由用户在创建数据库时指定);1个或多个簇又组成了逻辑的段(aegment),因此段是能跨多个数据文件的;最上层就是标间,它不直接管理段,而是与数据文件建立关系,它由1个或多个数据文件组成,表空间里存放用户、表、存储过程等,作为数据库对象的存储单元使用。综上,从下到上为:数据表里的记录(行)—>页(Page)—>簇/区( Extent)—>段---->数据文件---->表空间----->数据库。注意:记录是不能跨页存储的,记录的长度受到数据页大小的限制,DM 规定每条记录的总长度不能超过页面大小的一半,因一部分存储页的元数据;
当创建一个表/索引的时候,DM为表/索引的数据段至少分配一个簇,也就对应分配了一组空闲页等待数据写入;当空间不足时,DM数据库会自动分配新的簇。默认DM数据库在创建表/索引时,初始分配1个簇,当初始分配的空间用完时,DM数据库会自动扩展。分配簇时,表空间会按文件从小到大的顺序在各个数据文件中查找可用簇,找到后进行分配。
>
DM 支持的共享存储有两种:裸设备和DMASM;其中,后者在前者的基础上,部署并使用了 DMASM 文件系统。 DMDSC 是一个共享存储的数据库集群系统。DMDSC 集群基于单节点数据库管理系统之上,改造了 Buffer 缓冲区、事务系统、封锁系统和日志系统等,来适应共享存储集群节点间的全局并发访问控制要求。同时,引入缓存交换技术,提升数据在节点间的传递效率。 DMDSC 集群是一个多实例、单数据库的系统。多个数据库实例可以同时访问、修改同一个数据库的数据。用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。数据文件、控制文件在集群系统中只有一份,不论有几个节点,这些节点都平等地使用这些文件。各个节点有自己独立的联机日志和归档日志。这些文件就保存在共享存储上。DMDSC 集群主要由数据库和数据库实例、共享存储、本地存储、通信网络、以及集群控制软件 DMCSS 组成。
3.3、部署使用
3.4、配置及最佳实践
3.5、FAQ
四、mysql数据库迁移达梦
4.1、
五、数据库趋势
5.1、HTAP 数据库
HTAP,全称为Hybrid transaction and analysis processing,即混合事务和分析处理。HTAP是混合型关系数据库,是能同时提供OLTP和OLAP的混合关系型数据库。一般对OLTP的数据存储通常采用行式组织,而OLAP采用列式组织,OLTP( (On Line Transaction Processing,)是针对写优化设计的,OLAP(Online analytical processing)是针对读优化设计,OLTP的业务通常对实时要求比OLAP高很多,一般的做法是“”OLTP的数据定期会通过ETL(提取,转换,加载)工具把数据同步导入OLAP系统中,但这也导致OLAP的数据滞后,分析出来的结果时效性不够,对决策支持类如 BI 等系统的支持不够。随着越来越多的业务对于 AP 的要求越来越向着 TP 的指标看齐,对实时性要求同样高,要求 AP 系统能够实时反映出当前 TP 系统中的实际数据。同时,AP 系统应可以支持数据的更新等;人们希望能够同时满足业务对于 TP 负载和 AP 负载的需求,基于此提出了HTAP,以实现混合 OLTP 和 OLAP 业务同时TP和AP,它打破了事务处理和分析之间的“墙”。它支持更多的信息和实时业务的决策。但真正的 HTAP 并不应该是简单地将 TP 和 AP 相加:TP + AP ≠ HTAP。HTAP 一定是将 TP 和 AP 进行高度融合的产物。
1)广义的HTAP数据库:
- 在关系数据模型上进行OLTP(联机事务处理)时具有强一致性; OLTP主要是基本的、日常的事务处理。强调数据库内存效率,强调内存各种指标的命令率,强调并发操作。
- 融合分布式能力,从而具有高扩展性以内存型主列存为基础+增量行存来实现支持HTAP;第一类:以列存为主,主列存主要处理OLAP类分析查询,增量行存负责OLTP类事务操作,并直接将更新数据定期合并到主列存中,以OLAP的性能很高,OLTP处理性能中等,代表:SAP HANA。第二类:分布式行存为主存储,列存为行存的副本,主节点在处理事务时写入日志,并异步式地向其他节点发送最新日志,通过分布式协议进行事务处理。其中,有部分节点会被选为列存节点,负责加速复杂查询,此类系统面向OLTP和OLAP的扩展性都很高,代表:TiDB。
2)狭义的HTAP数据库:指采用行列混存或行列转化技术来同时支持事务能力和分析功能的数据库
- 行存为主,内存列存为辅:针对有需要的表会同时存在一份行存储和列存储,在列存储上做分析操作,在行存储上进行更新,定期同步到列存储里,可灵活指定需要采用行存与列存的表。主要难点为哪些数据转为列存、如何用行存和列存回答查询,代表:Oracle;
- 主机行存、备机内存列存:备机通过日志复制转为内存的列存提供分析能力。代表系统为MySQL HeatWave,分析型查询由系统查询引擎基于代价估计后决定是否下推到内存列引擎中执行,常被访问的热数据将会留在内存中,不常使用的冷数据将会被压缩后持久化到外存中;
- 多副本行列共存,通过多副本进行存储,主采用行存,副本采用列存:代表性系统为TiDB,行存数据存储在TiKV中,列存数据存储在TiFlash中,行存和列存松耦合,通过异步复制Raft log的方式将更新从行存节点同步到列存节点,列存节点不参与Raft协议的日志提交和leader选举等分布式事务,具有较高负载隔离性和扩展性,数据分析新鲜度偏低;
- 列存为主,行存为辅:增量数据通过delta表定期转为列存,主列存主要处理OLAP类分析查询,增量行存负责OLTP类事务操作,并直接将更新数据定期合并到主列存中。此类系统因为以列存为主,所以OLAP的性能很高,且增量行存直接与列存连接,数据分析的新鲜度也很高。但缺点也很明显,就是OLTP处理性能中等,扩展性也不高,负载隔离性很低,代表系统为SAP HANA,主列存通过压缩、向量执行和OLAP多维分析等技术进行查询加速,同时利用CPU多级缓存机制优化事务处理。
随着数据技术的不断创新,未来 HTAP 数据库会进一步加强 AP 和 TP之间的连接和融合,在数据库内部实现 AP 和 TP 之间的内置流(Streaming)处理能力。通过将 ETL 工作内置于数据库当中,让 HTAP 数据库同时具备 AP、TP 和流(Streaming)能力。用户可以按需创建各类表,运用流处理能力将表连接,从而获得简单、便捷的数据处理能力。另数据库与大数据技术边界不断模糊,呈现融合趋势,比如面向传统企业和中小企业的:湖仓一体;
相关资源:HTAP的关键技术有哪些?
5.2、列存储库:(代表Greenplum)
上面提到的HTAP,其中列存技术的发展是实现 HTAP 的基石;面向列存的数据,最早可以追溯到 1970 年,随着转置文件(transposed files)的出现,在面向时间的数据库(Time oriented Database)中使用转置文件进行医疗数据记录。Cantor 被称为是最早的一个与现代列存数据库相似的系统。
我们常见的传统数据库多以行存(Row-based)模型为主,它的数据物理上以行,页,段等方式进行分级管理的,表中的一行数据由 N 个数据属性构成,N 条数据构成一个页面,多个页面又构成了一个段,最后如此将众多的记录通过DBMS高效管理起来。对应行存方式组织数据,当在以分析型业务为主的系统中,分析所涉及的数据量通常非常多,将会有大量的记录会参与到分析计算中。而这些大量的记录需要从磁盘中读取到我们数据库的缓存中,由于数据是以行的方式组织,而我们的分析计算只需要特定的几个属性,但是需要把全部记录从需要从磁盘读取到缓存中,造成了不必要内存和IO资源的浪费;对此,列存储提出了DSM 模型,该模型中表的数据是按属性(列)的方式进行组织的,数据按属性形成一个新的子关系组织在一起,并独立于其他属性,这类数据在磁盘上存储时,我们可以对其进行压缩处理,从而节省存储,IO,内存等资源,另外,DSM 模型还属于 CPU Cache 友好型。