走近openGauss数据库
引言
数据库技术是20世纪60年代开始兴起的一门信息管理自动化的新兴学科,是计算机科 学中的一个重要分支。随着计算机应用的不断发展,在计算机应用领域中,数据处理越 来越占主导地位,数据库技术的应用也越来越广泛。数据库是数据管理的产物。数据管理是数据库的核心任务,内容包括对数据的分类、组织、编码、储存、检索和维护。本文将带领大家一起走近openGauss数据库。
1.了解openGauss
openGauss是一款携手伙伴共同打造的、全面友好开放的、全球领先的企业级开源关系型数据库,它具有面向多核的极致性能、全链路的业务和数据安全以及AI调优和高效运维的能力。其采用的是木兰宽松许可证v2发行。openGauss深度融合华为在数据库领域多年的研发经验,结合企业级场景需求,持续构建竞争力特性。
(注:“木兰宽松许可证”第2版(MulanPSL v2)经过严格审批,正式通过开源促进会(OSI)认证,被批准为国际类别开源许可证(International licenses)。该许可证通过认证,意味着其正式具有国际通用性,可被任一国际开源基金会或开源社区支持采用,并为任一开源项目提供服务。 简言之,这是相对于木兰严格协议的,宽松许可就是可以用源码再进行二次开发封装并进行商业化。)
openGauss也是一个开源的数据库产品,鼓励社区贡献、合作。openGauss采用客户端/服务器,单进程多线程架构,支持 单机和一主多备部署方式,备机可读,支持双机高可用和读扩展。
内部自用孵化 —> 联创产品化 —> openGauss开源 –> 共建生态
2.产品特点
openGauss相比于其他开源数据库主要有以下几个主要特点:
- 高性能
– 提供了面向多核架构的并发控制技术结合鲲鹏硬件优化,在两路鲲鹏下TPCC Benchmark达成性能150万tpmc。
– 针对当前硬件多核numa的架构趋势, 在内核关键结构上采用了NumaAware的数据结构。
– 提供Sql-bypass智能快速引擎技术。
- 高可用
– 支持主备同步,异步以及级联备机多种部署模式。
– 数据页CRC校验,损坏数据页通过备机自动修复。
– 备机并行恢复,10秒内可升主提供服务。
- 高安全
支持全密态计算,访问控制、加密认证、数据库审计、动态数据脱敏等安全特 性,提供全方位端到端的数据安全保护。
- 易运维
– 基于AI的智能参数调优和索引推荐,提供AI自动参数推荐。
– 慢SQL诊断,多维性能自监控视图,实施掌控系统的性能表现。
– 提供在线自学习的SQL时间预测。
- 全开放
– 采用木兰宽松许可证协议,允许对代码自由修改,使用,引用。
– 数据库内核能力全开放。
– 提供丰富的伙伴认证,培训体系和高校课程。
– openGauss相比其他开源数据库主要有多存储模式,NUMA化内核结构和高可用等产品特点。
3.软件架构
openGauss主要包含了openGauss服务器,客户端驱动,OM等模块,penGauss软件的架构如下所示。在openGauss的文档中,将openGauss服务器称为实例。
名称 |
描述 |
说明 |
OM |
运维管理模块(Operation Manager)。提供openGauss日常运维、配置管理的管理接口、工具。 |
不同于服务器和客户端驱动模块,OM为用户提供了相关工具对openGauss实例进行管理。 |
客户端驱动 |
客户端驱动(Client Driver)。负责接收来自应用的访问请求,并向应用返回执行结果;负责与 openGauss实例的通信,下发SQL在openGauss实 例上执行,并接收命令执 行结果。 |
负责接收来自应用的访问请求,并向应用返 回执行结果。客户端驱动负责建立到 openGauss实例的链接,把应用的SQL命令 传输给openGauss实例,接收openGauss实 例命令执行结果。客户端驱动和应用运行在同一个进程内,部 署在同一个物理节点。 |
openGauss 主(备) |
openGauss主(备)。负 责存储业务数据(支持行 存、列存、内存表存 储)、执行数据查询任务 以及向客户端驱动返回执 行结果。 |
负责存储业务数据、执行数据查询任务以及 向客户端驱动返回执行结果。openGauss实例包含主、备两种类型。支持 一主多备。建议将主、备openGauss分散部 署在不同的物理节点中。 |
Storage |
服务器的本地存储资源, 持久化存储数据。 |
- |
4.典型组网
为了保证整个应用数据的安全性,建议将openGauss的典型组网划分为两个独立网络:前端业务网络和数据管理存储网络。
类型 |
描述 |
数据库管理存储网 |
DBA通过此网络调用OM脚本管理和维护openGauss实例。同时,用于openGauss主备通信组网。数据库管理存储网络也是应用执行系统监控的网络。 |
前端业务网 |
外部客户端通过此网络访问openGauss数据库。 |
该典型组网有如下优点:
- 业务网络与数据库管理存储网络的隔离,有效保护了后端存储数据的安全。
- 业务网络和数据库管理存储网络的隔离,可以防止攻击者通过互联网试图对数据 库服务器进行管理操作,增加了系统安全性。
网络独占性及1:1的带宽收敛比是openGauss数据库网络性能的基本要求。因此,在生产系统中,对后端存储网络需满足独占性及至少1:1收敛比的要求。例如,下图其本质是Fattree组网方式。为实现收敛比1:1,交换网络层级每提高一层,带宽增加一倍。图中每根加粗连接线代表80GE带宽,即8台物理机带宽上限之和。接入层每单台交换机下行带宽160GE,上行带宽160GE,收敛比1:1;汇聚层每单台交换机接入带宽320GE。对于测试系统,上述要求可以适当降低。
5.应用场景
- 交易型应用
大并发、大数据量、以联机事务处理为主的交易型应用。例如电商、金融、O2O、电信CRM/计费等,应用可按需选择不同的主备部署模式。
- 物联网数据
在工业监控和远程控制、智慧城市的延展、智能家居、车联网等物联网场景下,传感监控设备多,采样率高,数据存储为追加模型,操作和分析并重的场景。
6.运行环境
支持的硬件平台
openGauss支持运行在ARM服务器和通用的x86服务器上:
- 支持ARM服务器和基于x86_64的通用PC服务器。
- 支持本地存储(SATA、SAS、SSD)。
- 支持千兆、万兆Ethernet网络。
支持的操作系统
ARM:
openEuler 20.03LTS(推荐采用此操作系统)
麒麟V10
X86:
openEuler 20.03LTS
CentOS 7.6
7.部署方案
单机部署
单机部署形态是一种非常特殊的部署形态,这种形态对于可靠性、可用性均无任何保证。由于只有一个数据副本,一旦发生数据损坏、丢失,只能通过物理备份恢复数据。这种部署形态,一般用于数据库体验用户,以及测试环境做语法功能调测等场景。不建议用于商业现网运行。
主备部署
主备模式相当于两个数据副本,主机和备机各一个数据副本,备机接受日志、执行日志回放。
一主多备
多副本的部署形态,提供了抵御实例级故障的能力,适用于不要求机房级别容灾,但是需要抵御个别硬件故障的应用场景。
一般多副本部署时使用1主2备模式,总共3个副本,3个副本的可靠性为99.99%,可以满足大多数应用的可靠性要求。
- 主备间Quorum复制,至少同步到一台备机,保证最大性能。
- 主备任意一个节点故障,不影响业务的进行。
- 数据有三份,任何一个节点故障,系统仍然有双份数据确保继续运行。任何一个备份都可以升主。
主备实例之间不可部署在同一台物理机上。
8.openGauss基本功能
openGauss 支持标准SQL
- SQL是用于访问和处理数据库的标准计算机语言。SQL标准的定义分成核心特性以及可选特性,绝大部分的数据库都没有100%支撑SQL标准。
- openGauss支持SQL2003标准语法,支持主备部署的高性能高可用关系型数据库。openGauss数据库支持SQL:2011大部分的核心特性,同时还支持部分的可选特性,为使用者提供统一的SQL界面。
- 标准SQL的引入为所有的数据库厂商提供统一的SQL界面,减少使用者的学习成本和应用程序的迁移代价。
openGauss 支持标准开发接口 - 基于ODBC 开发
ODBC(Open Database Connectivity,开放数据库互连)是由Microsoft公司基于X/OPEN CLI提出的用于访问数据库的应用程序编程接口。应用程序通过ODBC提供的API与数据库进行交互,增强了应用程序的可移植性、扩展性和可维护性。
openGauss 支持标准开发接口 – 基于JDBC 开发
JDBC(Java Database Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问接口,应用程序可基于它操作数据。openGauss库提供了对JDBC 4.0特性的支持,需要使用JDK1.8版本编译程序代码,不支持JDBC桥接ODBC方式。
openGauss 数据库事务的ACID 特性
- 原子性(Atomicity):事务所包含的操作要么全部完成,要么什么也没做。
- 一致性(Consistency):在一致性数据库上执行事务后,数据库仍需保持为一致性的状态。
- 隔离性(Isolation):没有结束的事务在提交之前不允许将其结果暴露给其它事务。
- 持久性(Durability):当一个事务的结果提交后,系统保证该结果不会因以后的故障而丢失。
openGauss 支持函数及存储过程
函数和存储过程是数据库中的一种重要对象,主要功能将用户特定功能的SQL语句集进行封装,并方便调用。openGauss支持SQL标准中的函数及存储过程,其中存储过程兼容了部分主流数据库存储过程的语法,增强了存储过程的易用性。
- 允许客户模块化程序设计,对SQL语句集进行封装,调用方便。
- 存储过程会进行编译缓存,可以提升用户执行SQL语句集的速度。
- 系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
openGauss 兼容PG 接口
⚫ 在基本的PostgreSQL发布中仅包含两个客户端接口:
libpq被包含是因为它是C语言接口, 许多其它客户端接口都依赖于它。
ECPG被包含的原因是它依赖于服务器端SQL语法, 因此对PostgreSQL自身的变化非常敏感。
⚫ openGauss 兼容PSQL客户端,兼容PostgreSQL标准接口,能够与PG生态工具无缝对接。
openGauss 支持SQL Hint
⚫ Plan Hint为用户提供了直接影响执行计划生成的手段,用户可以通过指定join顺序,join、stream、scan方法,指定结果行数,指定重分布过程中的倾斜信息等多个手段来进行执行计划的调优,以提升查询的性能。
⚫ openGauss支持SQL hint影响执行计划生成,用以提升SQL查询性能。
9.发展历程
2019年9月19日在华为全联接大会上,华为宣布将开源其数据库产品,开源后命名为openGauss。
2020年6月30日openGauss数据库源代码正式开放。
openGauss与云和恩墨、人大金仓、神舟通用等企业达成合作伙伴关系。当前已有50+企业加入社区组织,共同建设开源社区。
openGauss版本规划按照6个月一个小版本,1年一个大版本的节奏,版本生命周期暂定3年。
10.版本发布
2020年6月30日openGauss发布第一个版本,版本号为1.0.0。
2020年9月30日openGauss发布Update版本,版本号为1.0.1。
2020年12月30日openGauss发布Update版本,版本号为1.1.0。
2021年3月30日openGauss发布第一个Release版本,版本号为2.0.0。
2021年5月30日openGauss发布openGauss2.0.0的补丁版本,版本号为2.0.1。
2021年9月30日openGauss发布Preview版本,版本号为2.1.0。
2022年4月1日openGauss发布第二个Release版本,版本号为3.0.0。
11.openGauss与GaussDB(补充)
好多初次接触的同学经可能会有个疑问:即openGauss和GaussDB有啥关系?下面简单介绍一下:
首先两者没有直接关系,openGauss是开源出来的关系型、企业级的数据库,如上文所述。 而GaussDB指的是一个产品系列,在整体架构设计上,底层是分布式存储,中间是每个DB特有的数据结构,最外层则是各个生态的接口,体现了多模的设计理念。
GaussDB具体产品包括:
1)关系型数据库:
基于openGauss生态的分布式数据库GaussDB(for openGauss)
基于MySQL生态的分布式数据库GaussDB(for MySQL),100%兼容MySQL
2)非关系型数据库:
基于文档的分布式数据库 GaussDB(for Mongo),100%兼容MongoDB的接口,解决了开源的协议风险,用3副本解决9副本的可靠性
基于时序协议的分布式数据库 GaussDB(for Influx),解决了开源主备的容量问题
基于宽表Cassandra的 GaussDB(for Cassandra),解决了Java方案的GC抖动的严重问题,数据强一致;
基于KV接口GaussDB(for Redis), 当前100%兼容Redis,未来可以兼容更多的KV协议,数据强一致,超大容量10T+,解决了开源主备脱节等问题
3)数据库工具及中间件:
数据迁移 — DRS (Data Replication Service,简称为DRS);
应用结构转换 — UGO (Database and Application Migration UGO,简称UGO);
分布式数据库中间件 — DDM (Distributed Database Middleware, 简称DDM)
12.相关参考资料
openGauss社区官网:https://opengauss.org/zh/
openGauss代码托管平台:https://gitee.com/opengauss
openGauss 3.0.0版本官方文档:https://www.modb.pro/download/510887
作者:酷哥,转载:Gauss松鼠会
- 点赞
- 收藏
- 关注作者
评论(0)