草庐IT

【华为智能基座】Gauss数据库学习记录(一)

UI大数据划水 2023-04-05 原文

目录


引言

近期,报名参加了校内与华为合作的“智能基座”系列课程之一的“数据库”课程学习,通过这段时间的了解,感觉与openGauss相关的资料不多,所以,想通过写些博客来记录自己的学习过程,并分享一些openGauss的知识和一些个人在实操过程中遇到的报错以及解决方案给大家。
本篇主要是向大家介绍openGauss的概述等理论知识。

什么是openGauss呢?

openGauss是一款高性能、高安全、高可靠的企业级开源关系型数据库。采用客户端/服务器,单进程多线程架构,支持单机和一主多备部署方式,备机可读,支持双机高可用和读扩展。同时,openGauss还是一个单机数据库,具备关系型数据库的基本功能,以及企业特性的增强功能。

产品特点

openGauss相比其他开源数据库主要有复合应用场景、高性能和高可用等产品特点。

软件架构

openGauss主要包含了openGauss服务器,客户端驱动,OM等模块。

  • openGauss主备(Datanode):负责存储业务数据(支持行存、列存、内存表存储)、执行数据查询任务以及向客户端驱动返回执行结果。
  • 客户端驱动(Client Driver):负责接收来自应用的访问请求,并向应用返回执行结果;负责与openGauss实例的通信,下发SQL在openGauss实例上执行,并接收命令执行结果。
  • OM:运维管理模块(Operation Manager)。提供集群日常运维、配置管理的管理接口、工具。
  • Storage:服务器的本地存储资源,持久化存储数据。
  • openGauss是单机系统,在这样的系统架构中,业务数据存储在单个物理节点上,数据访问任务被推送到服务节点执行,通过服务器的高并发,实现对数据处理的快速响应。同时通过日志复制可以把数据复制到备机,提供数据的高可靠和读扩展。
  • openGauss实例包含主、备两种类型,支持一主多备。建议将主、备openGauss实例分散部署在不同的物理节点中。

典型组网

为了保证整个应用数据的安全性,建议将openGauss的典型组网划分为两个独立网络:前端业务网络和数据管理存储网络。

  • 前端业务网络:外部客户端通过此网络访问openGauss数据库
  • 数据库管理存储网络:DBA通过此网络调用OM脚本管理和维护openGauss实例。同时,用于openGauss主备通信组网。数据库管理存储网络也是应用执行系统监控的网络。

    该典型组网有如下优点:
  • 业务网络与数据库管理存储网络的隔离,有效保护了后端存储数据的安全。
  • 业务网络和数据库管理存储网络的隔离,可以防止攻击者通过互联网试图对数据库服务器进行管理操作,增加了系统安全性。
    网络独占性及1:1的带宽收敛比是openGauss数据库网络性能的基本要求。因此,在生产系统中,对后端存储网络,需满足独占性及至少1:1收敛比的要求。

    例如,上图中,其本质是Fattree组网方式。为实现收敛比1:1,交换网络层级每提高一层,带宽增加一倍。图中每根加粗连接线代表80 GE带宽,即8台物理机带宽上限之和。接入层每单台交换机下行带宽160 GE,上行带宽160 GE,收敛比1:1;汇聚层每单台交换机接入带宽320 GE。

openGauss运行环境

支持的硬件平台

openGauss支持运行在鲲鹏服务器和通用的x86服务器上:

  • 支持鲲鹏服务器和基于x86_64的通用PC服务器。
  • 支持本地存储(SATA、SAS、SSD)。
  • 支持千兆、万兆Ethernet网络。

支持的操作系统

  • openEuler release 20.03 (LTS) on ARM。推荐采用此操作系统。
  • CentOS 7.6 on X86-64。

openGauss基本功能

  1. 标准SQL支持:支持标准的SQL92/SQL99/SQL2003/SQL2011规范,支持GBK和UTF-8字符集,支持SQL标准函数与分析函数,支持存储过程。
  2. 数据库存储管理功能:支持表空间,可以把不同表规划到不同的存储位置。
  3. 提供主备双机:事务支持ACID特性、单节点故障恢复、双机数据同步,双机故障切换等。
  4. 应用程序接口:支持标准JDBC 4.0的特性、ODBC 3.5特性。
  5. 管理工具:提供安装部署工具、实例启停工具、备份恢复工具。
  6. 安全管理:支持SSL安全网络连接、用户权限管理、密码管理、安全审计等功能,保证数据库在管理层、应用层、系统层和网络层的安全性。

openGauss企业级增强特性

数据分区:

在openGauss中,数据分区是对数据集按照用户指定的策略对数据集做进一步拆分的水平分表,将表按照指定范围划分为多个数据互不重叠的部分(Partition)。同时,还支持范围分区(Range Partitioning)功能,即根据表的一列或者多列,将要插入表的记录分为若干个范围(这些范围在不同的分区里没有重叠),然后为每个范围创建一个分区,用来存储相应的数据。
数据分区带来的好处在于:

  • 改善可管理性:利用分区,可以将表和索引划分为一些更小、更易管理的单元。这样,数据库管理员在进行数据管理时就能采取“分而治之”的方法。 有了分区,维护操作可以专门针对表的特定部分执行。
  • 可提升删除操作的性能:删除数据时可以删除整个分区,与分别删除每行相比,这种操作非常高效和快速。删除分区表与删除普通表的语法一致,都是通过DROP TABLE语法进行删除。
  • 改善查询性能:通过限制要检查或操作的数据数量,分区可带来许多性能优势。
  • 分区剪枝:分区剪枝(也称为分区消除)是openGauss在执行时过滤掉不需要扫描的分区,只对相关的分区进行扫描的技术。分区剪枝通常可以将查询性能提高若干数量级。
  • 智能化分区联接:通过使用一种称为智能化分区联接的技术,分区还可以改善多表联接的性能。当将两个表联接在一起,并且至少其中一个表使用联接键进行分区时,可以应用智能化分区联接。

向量化执行和行列混合引擎:

向量化执行技术和列存储引擎可以极大的提升性能和减少存储空间。

  • 向量化执行
    • 标准的迭代器模型如右图所示。控制流向下、数据流向上、上层驱动下层、一次一元组(下层节点每次只返回一条元组给上层节点)。
    • 而向量化执行相对于传统的执行模式改变是对于一次一元组的模型修改为一次一批元组,配合列存特性,可以带来巨大的性能提升。
  • 行列混合存储引擎
    • openGauss支持行存储和列存储两种存储模型,用户可以根据应用场景,建表的时候选择行存储还是列存储表。
    • 一般情况下,如果表的字段比较多(大宽表),查询中涉及到的列不很多的情况下,适合列存储。如果表的字段个数比较少,查询大部分字段,那么选择行存储比较好。
    • 当前列存储引擎有以下约束:
      • DDL仅支持CREATE/DROP/TRUNCATE TABLE的功能;
      • 兼容分区的DDL管理功能(如: ADD/DROP/MERGE PARTITION,EXCHANGE功能);
      • 支持CREATE TABLE LIKE语法;
      • 支持ALTER TABLE的部分语法;
      • 其他功能都不支持;
      • DML支持UPDATE/COPY/BULKLOAD/DELETE;
      • 支持Psort index、B-tree index和GIN index。
  • 列存下的数据压缩
    • 对于非活跃的早期数据可以通过压缩来减少空间占用,降低采购和运维成本。
    • openGauss列存储压缩支持Delta Value Encoding、Dictionary、RLE 、LZ4、ZLIB等压缩算法,且能够根据数据特征自适应的选择压缩算法,平均压缩比7:1。压缩数据可直接访问,对业务透明,极大缩短历史数据访问的准备时间。

高可靠事务处理:

  • openGauss提供事务管理功能,保证事务的ACID特性。
  • 为了在主节点出现故障时尽可能地不中断服务,openGauss提供了主备双机高可靠机制。通过保护关键用户程序对外不间断提供服务,把因为硬件、软件和人为造成的故障对业务的影响程度降到最低,以保证业务的持续性。
  • 故障恢复
    • 支持节点故障可恢复及恢复后满足ACID特性。节点故障、停止后重启等情况下,openGauss能够保证故障之前的数据无丢失,满足ACID特性。
  • 事务管理:
    • 支持事务块,用户可以通过start transaction命令显式启动一个事务块。
    • 支持单语句事务,用户不显式启动事务,则单条语句就是一个事务。

高并发&高性能:

openGauss通过服务器端的线程池,可以支持1W并发链接。通过NUMA化内核数据结构,支持线程亲核性处理,可以支持百万级tpmC。通过页面的高效冷热淘汰,支持T级别大内存缓冲区管理。通过CSN快照,去除快照瓶颈,实现多版本访问,读写互不阻塞。通过增量检查点,避免全页写导致的性能波动,实现业务性能平稳运行。

SQL自诊断:

  • 通过执行查询对应的EXPLAIN ANALYZE,获得对应执行计划,是一种十分有效的定位查询性能问题的方法。但是这种方法需要修改业务逻辑,同时输出的日志量大,问题定位的效率依赖于人员的经验。SQL自诊断为用户提供了另一种更为高效易用的性能问题定位方法。
  • 在执行作业之前,配置GUC参数resource_track_level和resource_track_cost,然后运行用户作业,就可以通过查看相关系统视图,获得执行完成的相关查询作业可能存在的性能问题。
  • SQL自诊断可以在不影响用户作业,不修改业务逻辑的情况下,诊断出相对准确的性能问题,为用户提供更为易用的性能调优参考。

内存表:

内存表(MOT)是一个基于事务性行存储(rowstore)的存储引擎,该引擎针对多核和大内存服务器进行了优化。MOT是openGauss数据库最先进的商用级特性之一(beta发布),可为事务性负载提供更高的性能。MOT完全支持原子性、一致性、隔离性、持久性(ACID),并包括严格的耐久性和高可用性支持。
用户可以在关键任务、性能敏感的在线事务处理(OLTP)中使用MOT,以实现高性能、高吞吐、低且可预测的时延以及多路/多核处理器的高利用率。MOT特别适合用于多路/多核处理器的现代服务器。
例如,基于鲲鹏CPU的华为Taishan服务器(例如Taishan 2280或Taishan 2480服务器,最多256个核心)和x86的服务器(例如Taishan 2288服务器)。

  • 内存表把数据全部缓存在内存中,所有数据访问实现免锁并发,实现数据处理的极致性能,满足实时性严苛要求场景。
  • 内存表的配置参数
参数说明
enable_codegen_mot设置是否启用原生 LLVM Lite 执行简单查询。如果当前平台上不支持原生LLVM,那么将使用伪LLVM。
force_pseudo_codegen_mot设置是否强制伪LLVM Lite执行简单查询,即使当前平台上支持原生LLVM。
enable_codegen_mot_print设置是否打印生成函数的 IR 字节码(如果使用伪 LLVM,则打印伪 IR 字节码)。
codegen_mot_limit设置全局缓存计划源的数量限制,以及每个会话的克隆计划。
mot_allow_index_on_nullable_column设置是否允许在内存表nullable列上创建索引。
mot_config_file指定MOT的主配置文件。

主备双机:

  • 主备双机支持同步和异步复制,应用可以根据业务场景选择合适的部署方式。
  • openGauss支持页面损坏的自动修复,在主机页面发生损坏时,能够自动从备机修复损坏页面。openGauss支持备机并行日志恢复,尽量降低主机宕机时业务不可用的时间。
  • 同时,如果按照主备模式部署,并打开备机可读功能后,备机将能够提供读操作,但不支持写操作(如建表、插入数据、删除数据等),从而缓解主机上的压力。

    同步复制保证数据的高可靠,一般需要一主两备部署,同时对性能有一定影响。
    异步复制一主一备部署即可,对性能影响小,但异常时可能存在数据丢失。

openGauss系统框架

数据库逻辑结构

  • openGauss的数据库节点负责存储数据,其存储介质也是磁盘,本节主要从逻辑视角介绍数据库节点都有哪些对象,以及这些对象之间的关系。
  • 数据库逻辑结构如下图:
    • Tablespace:表空间,是一个目录,可以存在多个,里面存储的是它所包含的数据库的各种物理文件。每个表空间可以对应多个Database。
    • Database:数据库,用于管理各类数据对象,各数据库间相互隔离。数据库管理的对象可分布在多个Tablespace上。
    • Datafile Segment:数据文件,通常每张表只对应一个数据文件。如果某张表的数据大于1GB,则会分为多个数据文件存储。
    • Table:表,每张表只能属于一个数据库,也只能对应到一个Tablespace。每张表对应的数据文件必须在同一个Tablespace中。
    • Block:数据块,是数据库管理的基本单位,默认大小为8KB。

数据库物理结构

  • 并行回放,文件级并发执行, 支持备机可读
  • 极致RTO, 回放粒度更细, 支持页面级并行, 不支持备机可读
  • 数据库的文件默认保存在initdb时创建的数据目录中。在数据目录中有很多类型、功能不同的目录和文件,除了数据文件之外,还有参数文件、控制文件、数据库运行日志及预写日志等。
  • 数据目录结构(部分):
目录父目录用途
bin-存放数据库二进制文件的目录。
lib-存放数据库的库文件的目录。
share-存放数据库运行所需要的公共文件,如配置文件模板。
data(数据库节点/数据库主节点)-DBnode实例的数据目录,其中主实例的目录名为“data_dnxxx”,
备实例的为data_dnSxxx。xxx代表DBnode编号。
base实例数据目录包含每个数据库对应的子目录
global实例数据目录包含集簇范围的表的子目录
pg_audit实例数据目录(可配置)数据库审计日志目录。
pg_log实例数据目录(可配置)保存数据库节点实例的运行日志目录。
pg_xlog实例数据目录保存预写日志
postgresql.conf实例数据目录参数文件
pg_hba.conf实例数据目录客户端认证控制文件
postmaster.opts实例数据目录记录服务器启动时使用的命令行参数
gs_initdbbin数据库初始化工具
gs_dumpbin导出数据库相关信息的工具
gs_ctlbin数据库服务控制工具
gs_gucbin应用程序可以通过调用gs_guc来设置适合自己的参数
gsqlbin在命令行下运行的数据库连接工具

有关【华为智能基座】Gauss数据库学习记录(一)的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  3. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  4. ruby-on-rails - Rails 5 Active Record 记录无效错误 - 2

    我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa

  5. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  6. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  7. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  8. 华为常用命令 - 2

    system-view进入系统视图quit退到系统视图sysname交换机命名vlan20创建vlan(进入vlan20)displayvlan显示vlanundovlan20删除vlan20displayvlan20显示vlan里的端口20Interfacee1/0/24进入端口24portlink-typeaccessvlan20把当前端口放入vlan20undoporte1/0/10删除当前VLAN端口10displaycurrent-configuration显示当前配置02配置交换机支持TELNETinterfacevlan1进入VLAN1ipaddress192.168.3.100

  9. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  10. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

随机推荐