数据库国产化探究及升级改造过程指导

一、背景

在信创“自主可控”的浪潮下,政企行业首当其冲,基于国产化信创的要求,本部门某业务后端应用也需要针对分析开源组件的风险和开源协议的商业应用限制;能用国产化替代的评估后尽可替代割接,本期针对传统数据库Mysql向达梦数据库迁移的记录。

在这里插入图片描述
在这里插入图片描述

相关资源:达梦官方文档达梦在线服务平台墨天轮排行榜IDC数据报告数据报告洞见研报达梦线上实验室

二、数据库现状

无论什么样的数据库都离不开数据库本身定义的作用,即它是一套承载相互有关联关系的若干数据的集合,负责组织、存储和管理数据的仓库,一般由一个数据库管理系统(DBMS)来控制。数据库按照不同维度,分类方法多种多样,按数据结构可分为关系型数据库和非关系型数据库(NoSQL数据库、NewSQL数据库等);按设计架构可分为单机数据库、集中式数据库和分布式数据库。按部署方式可分为本地部署和云部署,按应用场景/功能可分为事务性数据库(OLTP)、分析型数据库(OLAP)以及混合型关系数据库(HTAP),还可按商业模式分为开源数据库和商业数据库(闭源)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
国内数据库的发展,传统厂商多采用集中式设计架构,以达梦、人大金仓、南大通用、万里开源为代表,而新兴厂商则利用分布式进行换道超车,以PingCAP、巨杉数据库、星环等初创企业为代表,随着数据库云化部署大势所趋,云厂商则兼顾了前2者,但也主要是以分布式为主,分布式数据库是通过计算机网络将物理分散的多个数据库单元连接组成的逻辑上统一的数据库;目前分布式数据库的技术路线分为三类:分库分表+中间件方案、共享存储分布式数据库、去中心化的分布式数据库。国内数据库市场,关系型数据库市场占比90%左右,这些年非关系型正在逐年上升。国产供应商主要代表有华为、阿里、达梦、人大金仓等,这4家合计占据约30%份额,根据IDC数据,截至2022年末,在国内关系型数据库中,公有云数据库的市场中以阿里云、华为、腾讯为代表的国产数据库厂商份额已远超海外数据库厂商。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2024年2月国内数据库排行榜:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、达梦数据库

3.1、产品介绍

在这里插入图片描述
当前官网最新版本为DM8,相较于目前主流产品架构:不同特性依靠不同内核去实现,DM8独特采用了双存储引擎架构,行存储引擎列存储引擎可相互配合、协同工作。同时实现了计算层和存储层的分离,同一内核既支持共享存储式集群,也支持分布式事务集群。达梦数据库采用分布式架构,可由多个节点组成,每个节点可以处理多个用户的请求,从而并发性能较好。达梦数据库目前已广泛应用于各种领域,包括金融、电信、政府、教育、医疗等。

产品特性:

  • 国产自研:官方声明未采用任何开源内核,完全掌握核心技术。因此知识产权风险可控。
  • 安全可靠,兼容性好:通过国家安全四级 EAL4+ 认证,支持国密算法以及第三方加密设备,号称是国内最高安全等级的数据库。它可适配各种软硬件体系,支持主流 SQL 标准和通用编程语言、接口、开发框架。在高并发、大数据量的应用中优势明显;
  • 高性能:采用基于代价计算的优化器和独立的虚拟机执行器,通过批量数据向量化执行和 MVCC 多版本并发控制等技术提升性能,实现双路 CPU 单节点 TPMC (吞吐量:transactions per minute)达到百万级。
  • 支持混合型业务处理:行列融合存储技术,支持混合负载,一套系统上同时支撑 OLAP 和 OLTP 业务场景,在此基础上,具备 HTAP 混合型业务处理能力。
  • 易用:可按照用户业务需求配置为不同集群模式,支持集中式、分布式架构;官方提供迁移评估和自动迁移工具,使数据库迁移更加便捷;支持柔性替换,降低系统迁移风险。更符合中国技术人员使用习惯,配置一站式“驾驶舱”工具集,支持数据库统一运维管理、 SQL 调试分析和监控告警。降低了使用、迁移和运维成本。

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 数据库仍然会为该表保留 1-2 个簇供后续使用。若用户使用 DROP 语句来删除表/索引对象,则此表/索引对应的段以及段中包含的簇全部收回,但其占用的表空间不会自动删除,这些释放的簇会继续供存储于此表空间的其他模式对象使用。对于临时表空间,DM 数据库会自动释放在执行 SQL 过程中产生的临时段,并将属于此临时段的簇空间还给临时表空间。对于回滚表空间,DM 数据库将定期检查回滚段,并确定是否需要从回滚段中释放一个或多个簇。
    对于最上层的数据段,在同一个表空间中,因段中的簇可以来自不同文件且簇时按需分配,故数据段中的不同簇在磁盘上一般是不连续的。

    在这里插入图片描述>\
  • (物理)存储结构:包括配置文件(dm.ini、dmmal.ini、dmmarch.ini、dm_svc.conf、sqllog.ini、 dmrep.ini ),控制文件(记录文件分布,dm.ctl )、数据文件(保存用户实 际数据,*.dbf)、redo、归档和跟踪日志文件、备份文件;其中,每个DM数据库实例必须至少有 2 个重做日志文件,默认两个日志文件为DAMENG01.log、DAMENG02.log,这两个文件循环使用。非归档模式下,数据库会只将重做日志写入联机日志文件中进行存储;归档模式下, 数据库会同时将重做日志写入联机日志文件和归档日志文件中分别进行存储
    \
  • DM内存结构:DM 数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区等;其中,内存池包括共享内存池和其他一些运行时内存池。缓冲区包含数据缓冲区、日志缓冲区、字典缓冲区、SQL 缓冲区;排序缓冲区提供数据排序所需要的内存空间。当用户执行 SQL 语句时,常常需要进行排序,所使用的内存就是排序缓冲区提供的。可用参数 SORT_BUF_SIZE 在 DM 配置文件 dm.ini 中指定排序缓冲区大小,默认值 20M;DM8 提供了为哈希连接而设定的缓冲区,不过该缓冲区是个虚拟缓冲区。当在进行哈希连接时,对 排序的数据量进行了计算。如果计算出的数据量大小超过了哈希缓冲区的大小,则使用 DM8 创新的外存哈希方式;如果没有超过哈希缓冲区的大小,实际上还是使用内存池来进行哈希 操作。可在 dm.ini 中使用参数 HJ_BUF_SIZE 来进行控制,该值的大小可能会 限制哈希连接的效率,一般保持默认即可;HAGR_HASH_SIZE表示处理聚集函数时创建哈希表的个数,默认值100000。
    \
  • 表空间:DM数据库表空间分为普通表空间及混合表空间,普通表空间不能存储 HUGE 表,而混合表空间可以同时存储普通(非 HUGE)表和 HUGE 表,其中 HUGE 数据文件存储在混合表空间定义中指定的 HUGE 数据文件路径下。可以通过为普通表空间增加指定 HUGE 数据文件路径将普通表空间升级为混合表空间。在创建 DM 数据库时,会自动创建 4 个表空间:SYSTEM 表空间、ROLL 表空间、MAIN 表空间和 TEMP 表空间,其中ROLL表空间类似Oracle的UNDO表空间,MAIN表空间类似Oracle的User表空间。其中,SYSTEM 表空间存放了有关 DM 数据库的字典信息;ROLL 表空间用来存放事务运行过程中执行 DML 操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视图,由 DM 数据库自动维护,用户无需干预。MAIN 表空间为混合表空间,它会在初始化库的时候,就会自动创建一个大小为 128M 的数据文件 MAIN.DBF,以及一个 HMAIN 目录作为 HUGE 数据文件路径;另创建用户时,如果没有指定默认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间;。默认的用户表空间是 SYSTEM,SYSDBA 的默认表空间为 MAIN,新创建的用户如果没有指定默认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间。
    \

DM 支持的共享存储有两种:裸设备和DMASM;其中,后者在前者的基础上,部署并使用了 DMASM 文件系统。 DMDSC 是一个共享存储的数据库集群系统。DMDSC (达梦数据共享集群)集群基于单节点数据库管理系统之上,改造了 Buffer 缓冲区、事务系统、封锁系统和日志系统等,来适应共享存储集群节点间的全局并发访问控制要求。同时,引入缓存交换技术,提升数据在节点间的传递效率。 DMDSC 集群是一个多实例、单数据库的系统。多个数据库实例可以同时访问、修改同一个数据库的数据。用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。数据文件、控制文件在集群系统中只有一份,不论有几个节点,这些节点都平等地使用这些文件。各个节点有自己独立的联机日志和归档日志。这些文件就保存在共享存储上。DMDSC 集群主要由数据库和数据库实例、共享存储、本地存储、通信网络、以及集群控制软件 DMCSS 组成。
在这里插入图片描述
在这里插入图片描述

3.3、部署配置

1)安装前准备

DM 完全安装需要至少 1 GB 以上的存储空间;支持x86_64 架构;安装前必须创建 dmdba 用户,禁止使用 root 用户安装数据库。

groupadd dinstall -g dmdbmin
useradd  -G  dinstall -m -d /home/dmdba -s /bin/bash -u dmdbmin dmdba
passwd dmdba
#修改系统连接数限制
vi /etc/security/limits.conf #如下,其中后4条新增
dmdba  soft      nice       0
dmdba  hard      nice       0
dmdba  soft      as         unlimited
dmdba  hard      as         unlimited
dmdba  soft      fsize      unlimited
dmdba  hard      fsize      unlimited
dmdba  soft      nproc      65536
dmdba  hard      nproc      65536
dmdba  soft      nofile     65536
dmdba  hard      nofile     65536
dmdba  soft      core       unlimited
dmdba  hard      core       unlimited
dmdba  soft      data       unlimited
dmdba  hard      data       unlimited
#验证
su - dmdba
ulimit -a
#创建实例保存目录、归档保存目录、备份保存目录,默认配置 DM 数据库安装在 /home/dmdba 文件夹下
##实例保存目录
mkdir /opt/dmdata/data 
##归档保存目录
mkdir -p /opt/dmdata/arch
##备份保存目录
mkdir -p /opt/dmdata/dmbak
#授权
chown -R dmdba:dinstall /opt/dmdata/data
chown -R dmdba:dinstall /opt/dmdata/arch
chown -R dmdba:dinstall /opt/dmdata/dmbak
chmod -R 755 /opt/dmdata/data
chmod -R 755 /opt/dmdata/arch
chmod -R 755 /opt/dmdata/dmbak

2)数据库安装

#软件下载,推荐下载docker版本
https://eco.dameng.com/download/
wget https://download.dameng.com/eco/dm8/dm8_20230808_rev197096_x86_rh6_64_single.tar #或
docker pull registry.cn-shanghai.aliyuncs.com/techerwang/dbhub:jem_dm8
#进入/opt目录,导入docker镜像包,从包名看有点老
docker load -i dm8_20230808_rev197096_x86_rh6_64_single.tar
#验证导入的镜像
docker images
#启动容器,将本地/opt/dmdbms/data下的
docker run -d -p 30236:5236 --restart=always --name dm8_db1 --privileged=true -e PAGE_SIZE=16 -e LD_LIBRARY_PATH=/opt/dmdbms/bin -e  EXTENT_SIZE=32 -e BLANK_PAD_MODE=1 -e LOG_SIZE=1024 -e UNICODE_FLAG=1 -e LENGTH_IN_CHAR=1 -e INSTANCE_NAME=dm8_db1 -v /data/dm8_db1:/opt/dmdbms/data dm8_single:dm8_20230808_rev197096_x86_rh6_64
#验证
docker ps
docker logs -f  dm8_db1
#管理
docker stop  dm8_db1
docker start  dm8_db1
docker restart  dm8_db1
#登陆,如果使用 docker 容器里面的 disql,进入容器后,先执行 source /etc/profile 防止中文乱码;.新版本 Docker 镜像中数据库默认用户名/密码为 SYSDBA/SYSDBA001
disql SYSDBA/SYSDBA001
SQL> desc v$database;
SQL> select
NAME,
CREATE_TIME,
ARCH_MODE,
TOTAL_SIZE,
OPEN_COUNT,
STARTUP_COUNT from v$database;
SQL> select * from v$tablespace;
#创建表空间,初始大小为 128M
create tablespace "spms" datafile '/data/dmdata/DAMENG/TEST.DBF' size 128 ;
#修改表空间,打开自动扩展,每次制动扩展 100M ,扩展上限 10240M,使用 RC4 加密算法,自动扩展默认为打开状态
alter tablespace "SPMS" datafile '/data/dmdata/DAMENG/TEST.DBF' autoextend on next 100 maxsize 10240 CACHE = NORMAL encrypt with RC4;;
#创建用户
create user "dmdba" identified by "DaM7777@123" hash with SHA512 salt
encrypt by "123456"
default tablespace "TEST"
default index tablespace "TEST";
#授权
grant "PUBLIC","SOI","DBA","RESOURCE" to to "dmdba";

3.4、配置及最佳实践

3.5、使用

disql SYSDBA/SYSDBA@ip:端口  #连接数据库
select * from v$tablespace;  #查看表空间信息

3.6、其他和FAQ

1)达梦数据库监控:DEM

DEM全称为Dameng Enterprise Manager,是一个Web的数据库监控系统,通过DEM可以同时对多套达梦数据库环境进行监控。DEM环境需要一台Web服务端,然后在每个达梦数据库端安装DEM代理。通过 DEM 工具来进行 DM 数据库的对象管理、状态监控、SQL 查询与调试。通过远程主机部署代理,能够实现对远程主机状态和远程主机上 DM 数据库实例和集群状态的监控。镜像里默认配置了DEM,端口为8080,主机映射端口为58080,
所以DEM的访问地址为:http://192.168.1.54:58080/dem/;用户名为admin,密码为888888

2)开源工具监控

参看:DM监控

四、mysql数据库迁移达梦

4.1、通过达梦数据库迁移工具进行

达梦提供了迁移工具DTS,它支持将主流数据库迁移到达梦数据库,DTS提供了异构数据源之间的评估,迁移和对比功能,以向导方式引导用户通过简单的步骤,完成从MySQL源数据库迁移至达梦(DM8)目标数据库的操作。但注意的是:DM 数据库和 MySQL 体系结构上存在差异,SQL 语法也存在一定的差异,DM 数据库针对 MySQL 做了良好的兼容性适配。更多参看官方迁移指导注意的是:迁移之前⼀定要先创建所迁移的模式对应的⽤户(⽤户名需要与所迁移的模式相同)。

1)迁移准备

  1. 确认要迁移的用户(模式、数据库)
  2. 记录原数据库中要迁移的对象的数量(数据量):表、分区表、视图、自定义类型、触发器、存储过程、函数、其他除迁移工具外,需要人工对大表、大字段表是否单独迁移进行评估及确
  3. 定如何配置大表、大字段表的迁移策略。
  4. 记录原数据库中要迁移的所有对象名称
  5. 记录原数据库中要迁移的表的数据量(行数),了解迁移数据量、字符编码、归档保留、数据库对象、表空间等信息,为后续迁移做好规划和相关准备工作
  6. 停止应用,备份数据库
  7. 创建目标数据及实例
  8. 创建目标数据的表空间及用户

a. 创建DSM产品各服务所需的表数据空间(单位:M):CREATE TABLESPACE DSM_DATA_TABLESPACE DATAFILE 'DSM_DATA01.dbf' SIZE 5120;
b.创建DSM产品各服务所需的表索引空间(单位:M):CREATE TABLESPACE DSM_IDX DATAFILE 'DSM_IDX01.dbf' SIZE 200;
c. 创建DSM产品各服务所对应的⽤户,并授权DBA:CREATE USER "XXX" IDENTIFIED BY "XXXXXX" DEFAULT TABLESPACE "DSM_DATA_TABLESPACE" DEFAULT INDEX TABLESPACE "DSM_IDX";然后GRANT DBA TO USERXXX;

  1. 移植后的收尾工作包括:索引补录、更新统计信息、备份、整理对象脚本等内容,保障移植工作的完整性。迁移完成后,修改应用连接到达梦数据库,验证系统移植的完整性,进行应用的相关功能和性能测试

在这里插入图片描述

2)打开DM迁移工具,新建工程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

再输入目的数据库(DM 数据库)的信息:主机名 (IP) 、端口(DM 默认端口 5236),用户名和口令:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3)非标对象手动迁移

对于非表对象,如存储过程、触发器、自定义类型、函数等对象。需要从源端MYSQL库导出为sql文件,并且经过人工修改为满足达梦语法的sql文件,再导入达梦数据库。

mysqldump -u 数据库用户名 -p -n -t -d -R 数据库名 > xx.sql

4)验证

select object_type,count(*) from all_objects where owner=root group by object_type order by 1;

5)统计信息更新

数据核对完成无问题后,应进行一次全库的统计信息更新工作。更新统计信息的目的在于大批量迁移数据后,可能会导致数据库优化器根据错误的统计信息得到错误的查询计划,严重影响查询性能。

DBMS_STATS.GATHER_SCHEMA_STATS('用户名',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');

6)FAQ

1》 达梦里面int数据类型不需要设置精度。如果mysql里有int(10)类型,去除改为int;
2》时间类型修改:mysql中时间类型TIMESTAMP默认 default 设置为‘0000-00-00 00:00:00’,而在DM中TIMESTAMP类型数据不能为‘0000-00-00 00:00:00’,在DM中是不合法的,必须在‘0001-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’之间。所以处理方法,可以先在达梦修改该字段为varchar2,迁移完数据后。在达梦处理掉这些不合法的数据,再将字段类型改为TIMESTAMP。
3》表记录长度限制:初始化库的时候,选择的页大小影响后面表每行数据的长度,表每行的长度之和(普通数据类型)不能超过一页大小,如果超过1页大小即报记录超长的错误。解决办法:初始化库,选择合适的页大小;也可以将varchar类型比较长的(如varchar2(8000)这种),修改成text类型;或者对表启用超长记录alter table 表名 enable using long row;
4》目标字段长度不够导致的字符串截断:一般是字符集、表字段长度不够。所以要根据源库选择合适的字符集,遵循源库是什么字符集,目标端也选择该字符集。目的端表字段长度不足,则需要手动将该字段长度增大,或者选择迁移方式的时候,选择字符长度隐射关系为2(即将目的端字符串类型字段自动扩大2倍长度)。
5》注意外键约束导致的迁移失败:比如父表的数据没有迁移,先迁移了子表的数据。所以在迁移数据的时候,可以分三步走,先迁移表结构,再迁移数据,最后迁移索引、约束等。
6》视图迁移过程中顺序问题报错:无效的用户对象;这个问题一般是因为在迁移视图之前,没有将视图依赖的表迁移过去。所以要遵循先迁移表,再迁移视图的顺序。

五、数据库趋势

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 友好型。

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羌俊恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值