openGauss
<a href =“https://opengauss.org/zh/” target = '_blank‘> 官方文档
openGauss是一款全面友好开放,携手伙伴共同打造的企业级开源关系型数据库。openGauss提供面向多核架构的极致性能、全链路的业务、数据安全、基于AI的调优和高效运维的能力。openGauss深度融合华为在数据库领域多年的研发经验,结合企业级场景需求,持续构建竞争力特性。
系统架构
openGauss是单机系统,在这样的系统架构中,业务数据存储在单个物理节点上,数据访问任务被推送到服务节点执行,通过服务器的高并发,实现对数据处理的快速响应。同时通过日志复制可以把数据复制到备机,提供数据的高可靠和读扩展。
逻辑架构图
名称 | 描述 |
---|---|
OM | 运维管理模块(Operation Manager)。提供数据库日常运维、配置管理的管理接口、工具。 |
CM | 数据库管理模块(Cluster Manager)。管理和监控数据库系统中各个功能单元和物理资源的运行情况,确保整个系统的稳定运行。 |
客户端驱动 | 客户端驱动(Client Driver)。负责接收来自应用的访问请求,并向应用返回执行结果。客户端驱动负责与openGauss实例通信,发送应用的SQL命令,接收openGauss实例的执行结果。 |
openGauss(主备) | openGauss主备(Datanode)。负责存储业务数据、执行数据查询任务以及向客户端返回执行结果。openGauss实例包含主、备两种类型,支持一主多备。建议将主、备openGauss实例分散部署在不同的物理节点中。 |
Storage | 服务器的本地存储资源,持久化存储数据。 |
应用场景
-
交易型应用
大并发、大数据量、以联机事务处理为主的交易型应用,如电商、金融、O2O、电信CRM/计费等,应用可按需选择不同的主备部署模式。
-
物联网数据
在工业监控和远程控制、智慧城市的延展、智能家居、车联网等物联网场景下,传感监控设备多,采样率高,数据存储为追加模型,操作和分析并重的场景。
运行环境
支持的硬件平台
openGauss支持运行在ARM服务器和通用的x86服务器上:
- 支持ARM服务器和基于x86_64的通用PC服务器。
- 支持本地存储(SATA、SAS、SSD)。
- 支持千兆、万兆Ethernet网络。
支持的操作系统
- ARM:
- openEuler 20.03LTS(推荐采用此操作系统)
- 麒麟V10
- Asianux 7.5
- X86:
- openEuler 20.03LTS
- CentOS 7.6
- Asianux 7.6
技术指标
技术指标 | 最大值 |
---|---|
数据库容量 | 受限于操作系统与硬件 |
单表大小 | 32TB |
单行数据大小 | 1GB |
每条记录单个字段的大小 | 1GB |
单表记录数 | 248 |
单表列数 | 250~1600(随字段类型不同会有变化) |
单表中的索引个数 | 无限制 |
复合索引包含列数 | 32 |
单表约束个数 | 无限制 |
并发连接数 | 10000 |
分区表的分区个数 | 32768(范围分区)/64(哈希分区/列表分区) |
分区表的单个分区大小 | 32TB |
分区表的单个分区记录数 | 255 |
基本功能
-
标准SQL支持
支持标准的SQL92/SQL99/SQL2003/SQL2011规范,支持GBK、GB18030、UTF-8、SQL ASCII以及Latin-1字符集,支持SQL标准函数与分析函数,支持存储过程。
-
数据库存储管理功能
支持表空间,可以把不同表规划到不同的存储位置。
-
提供主备双机
事务支持ACID特性、单节点故障恢复、双机数据同步,双机故障切换等。
-
应用程序接口
支持标准JDBC 4.0的特性、ODBC 3.5特性。
-
管理工具
提供安装部署工具、实例启停工具、备份恢复工具。
-
安全管理
支持SSL安全网络连接、用户权限管理、密码管理、安全审计等功能,保证数据库在管理层、应用层、系统层和网络层的安全性。
企业级增强特性
数据分区
openGauss支持:
- 范围分区(Range Partitioning)功能,即根据表的一列或者多列,将要插入表的记录分为若干个范围(这些范围在不同的分区里没有重叠),然后为每个范围创建一个分区,用来存储相应的数据。
- 列表分区(List Partitioning)功能,即根据表的一列,将要插入表的记录中出现的键值分为若干个列表(这些列表在不同的分区里没有重叠),然后为每个列表创建一个分区,用来存储相应的数据。
- 哈希分区(Hash Partitioning)功能,即根据表的一列,通过内部哈希算法将要插入表的记录划分到对应的分区中。用户在CREATE TABLE时增加PARTITION参数,即表示针对此表应用数据分区功能。
场景描述 | 收益 |
---|---|
当表中访问率较高的行位于一个单独分区或少数几个分区时。 | 大幅减少搜索空间,从而提升访问性能。 |
当需要查询或更新一个分区的大部分记录时。 | 仅需要连续扫描对应分区,而非扫描整个表,因此可大幅提升性能。 |
当需要大量加载或者删除的记录位于一个单独分区或少数几个分区时。 | 可直接读取或删除对应分区,从而提升处理性能;同时由于避免大量零散的删除操作,可减少清理碎片工作量。 |
向量化执行和行列混合引擎
在大宽表,数据量比较大、查询经常关注某些列的场景中,行存储引擎查询性能比较差。例如气象局的场景,单表有200~800个列,查询经常访问10个列,在类似这样的场景下,向量化执行技术和列存储引擎可以极大的提升性能和减少存储空间。
融合存储引擎
融合引擎架构支持了可插拔存储引擎的架构,新增了In-place update存储引擎,索引多版本为索引增加了事务信息,Xlog无锁刷新极大提升了Xlog写入效率,并行Page回放提升了备机回放效率,企业级特性闪回为用户提供了一个稳定的查询状态。
部署方案
常用概念
-
单机
单机指的是只有一个数据库实例。
-
双机
双机指的是系统中存在主备数据库实例,主实例支持读写,备实例支持只读。
-
一主多备
一主多备指的是在系统存在一个主机,多个备机。openGauss最多支持8个备机。
-
冷热备份
冷备份:是指备份就是一个简单的备份集,不可以提供服务。
热备份:是指备份实例可以对外提供服务
软件配置要求
软件类型 | 配置描述 |
---|---|
操作系统 | ARM:openEuler 20.3 LTS(推荐采用此操作系统)麒麟V10Asianux 7.5x86:openEuler 20.3 LTSCentOS 7.6Asianux 7.6 |
文件系统 | 在EulerOS操作系统下建议首选使用Ext4格式文件系统。剩余inode个数 > 15亿(推荐)。 |
工具 | bzip2 |
Python | openEuler:支持Python 3.7.XCentOS:支持Python 3.6.X麒麟:支持Python 3.7.XAsianux:支持Python 3.6.X |
硬件配置要求
项目 | 配置描述 |
---|---|
最小内存 | 功能调试32GB以上。性能测试和商业部署时,单实例部署,建议128GB以上。复杂的查询对内存的需求量比较高,在高并发场景下,可能出现内存不足。此时建议使用大内存的机器,或使用负载管理限制系统的并发。 |
CPU | 功能调试最小1×8核,2.0GHz。性能测试和商业部署时,单实例部署,建议1×16核,2.0GHz。CPU超线程和非超线程两种模式都支持。但是,主备各节点的设置需保持一致。 说明:目前,openGauss仅支持ARM服务器和基于x86_64通用PC服务器的CPU。 |
硬盘 | 用于安装实例的硬盘需最少满足如下要求:至少1GB用于安装实例的应用程序包。每个主机需大约300MB用于元数据存储。预留70%以上的磁盘剩余空间用于数据存储。建议系统盘配置为RAID1,数据盘配置为RAID5,且规划4组RAID5数据盘用于安装openGauss实例。有关RAID的配置方法在本手册中不做介绍。请参考硬件厂家的手册或互联网上的方法进行配置,其中Disk Cache Policy一项需要设置为Disabled,否则机器异常掉电后有数据丢失的风险。openGauss支持使用SSD盘作为数据库的主存储设备,但必须是SAS接口的SSD盘,以RAID的方式部署使用。 |
网络要求 | 300兆以上以太网。建议网卡设置为双网卡冗余bond。有关网卡冗余bond的配置方法在本手册中不做介绍。请参考硬件厂商的手册或互联网上的方法进行配置。主备网络如果配置bond,请保证bond模式一致,不一致的bond配置可能导致主备通信工作异常。 |
数据库核心技术
面向应用开发的基本功能
支持标准SQL、支持标准开发接口、事务支( 原子性、一致性、隔离性、持久性)、函数及存储过程支持、PG接口兼容、支持SQL hint、Copy接口支持容错机制
CBO优化器
openGauss优化器是典型的基于代价的优化(Cost-Based Optimization,简称CBO)。在这种优化器模型下,数据库根据表的元组数、字段宽度、NULL记录比率、distinct值、MCV值、HB值等表的特征值,以及一定的代价计算模型,计算出每一个执行步骤的不同执行方式的输出元组数和执行代价(cost),进而选出整体执行代价最小/首元组返回代价最小的执行方式进行执行。
CBO优化器能够在众多计划中依据代价选出最高效的执行计划,最大限度的满足客户业务要求。
行列混合存储
openGauss支持行存储和列存储两种存储模型,用户可以根据应用场景,建表的时候选择行存储还是列存储表。
一般情况下,如果表的字段比较多(大宽表),查询中涉及到的列不很多的情况下,适合列存储。如果表的字段个数比较少,查询大部分字段,那么选择行存储比较好。
In-place update存储
新增的In-place update存储引擎很好的解决了Append update存储引擎空间膨胀和元组较大的问题,高效回滚段的设计是In-place update存储引擎的基础。
Xlog无锁刷新与并行Page回放
本特性对WalInsertLock进行优化,利用LSN(Log Sequence Number)及LRC(Log Record Count)记录了每个backend线程的拷贝进度,取消WalInsertLock机制。
自适应压缩
当前主流数据库通常都会采用数据压缩技术。数据类型不同,适用于它的压缩算法不同。对于相同类型的数据,其数据特征不同,采用不同的压缩算法达到的效果也不相同。自适应压缩正是从数据类型和数据特征出发,采用相应的压缩算法,实现了良好的压缩比、快速的入库性能以及良好的查询性能。
分区
在openGauss系统中,数据分区是在一个实例内部按照用户指定的策略对数据做进一步的水平分表,将表按照指定范围划分为多个数据互不重叠的部分。
SQL by pass
在典型的OLTP场景中,简单查询占了很大一部分比例。这种查询的特征是只涉及单表和简单表达式的查询,因此为了加速这类查询,提出了SQL-BY-PASS框架,在parse层对这类查询做简单的模式判别后,进入到特殊的执行路径里,跳过经典的执行器执行框架,包括算子的初始化与执行、表达式与投影等经典框架,直接重写一套简洁的执行路径,并且直接调用存储接口,这样可以大大加速简单查询的执行速度
鲲鹏NUMA架构优化
单表达式的查询,因此为了加速这类查询,提出了SQL-BY-PASS框架,在parse层对这类查询做简单的模式判别后,进入到特殊的执行路径里,跳过经典的执行器执行框架,包括算子的初始化与执行、表达式与投影等经典框架,直接重写一套简洁的执行路径,并且直接调用存储接口,这样可以大大加速简单查询的执行速度