GaussDB的相关小知识

举报
幕后小黑爪 发表于 2022/09/24 18:35:33 2022/09/24
【摘要】 本文对高斯数据库的基本内容进行简单介绍

1、逻辑集群

  • 物理集群: 用户自己创建的集群,用户在创建表前必须先创建逻辑集群。
  • 逻辑集群: 调用gs_lcctl工具来创建或使用FI界面逻辑集群功能模块创建。
  • 弹性逻辑集群: 逻辑集群之外的DN自动生成,不需要用户手动创建。

     特点:

  • 一个物理节点只能属于一个逻辑集群,不属于逻辑集群的节点会自动划分到弹性子集群中。
  • 每个CN都可以连接到所有DN,每个CN可以接受多个用户会话
  • 只有有权限的用户才能访问特定逻辑集群的数据
  •  gs_lcctl:用于命令行的方式创建逻辑集群的工具

    支持逻辑集群及多租户融合管理,逻辑集群之间资源隔离及资源弹性。

2、高斯数据库对大数据的处理

目前面临的痛点和挑战:

  • 大量数据存储于HDFS,冷热数据混合查询:数仓本地存储客户较近热数据,大量历史数据归档到HDFS上,在探索式查询下需要冷热数据进行关联查询,如终端云需求;
  • HDFS大数据量与GaussDB客户集群处理能力失调:冷数据量会远大于GaussDB本地存储,此时存储GaussDB本地计算能力同数据量的失调,导致查询性能无法忍受;
  • 对Spark、Oracle、其他GaussDB数据的零星访问需求:需要访问的数据存在其他Spark、Oracle、 GaussDB环境中,数据迁移成本远高于收益。

     冷数据是不常用数据,历史数据。热数据是常用数据,当前数据。

     解决方案:

  • 统一分布式查询计划:优化器对冷热数据统一生成查询执行计划,决定最小化数据扫描、实现scan、agg、Join算子下推,大量减少HDFS资源池及客户VPC间的网络流量;
  • 计算资源动态估算与调度:针对SQL成本代价估算,动态申请计算资源,实现共享资源池的统一调度与管理;
  • 将分布式OLAP数据分析能力扩展到HDFS中;
  • 一个SQL引擎访问多个数据源:支持通过GaussDB的SQL引擎对其他Oracle、Spark、GaussDB的数据的直接访问。

     数据访问包括基于Extension Connector的数据访问和基于Foreign Table的数据访问。

  • 基于Extension Connector的数据访问(访问外部数据)。 Extension Connector将SQL语句发送到集群外部的Oracle数据库、Spark和其他GaussDB集群,并在当前库中返回执行结果,实现跨集群处理数据。 关键函数 -- exec_on_extension(text,text)。 第一个参数为Data Source名称,第二个参数为发送的SQL语句。 连接函数exec_on_extension通过标准的unixODBC API,调用相应目标库(Oracle、GaussDB集群和Spark集群)的ODBC驱动程序,进行实时连接,并将SQL语句发送给目标执行,执行完成后返回结果。
  • 基于Foreign Table的数据访问(访问内部数据)。 HDFS上原生数据的访问,采用FDW(Foreign Data Wrapper)机制。 操作步骤: 创建Foreign Data Server来定义HDFS数据源的连接信息; 创建Foreign Table,用于在GaussDB数据库内部系统表中,定义对应的HDFS数据源上原生结构化数据表的结构。

3、内存自适应 

      自动调整负载来保证所有查询可以完整执行,避免出现内存分配报错问题。

  • 开启内存自适应,enable_dynamic_workload需要设置为on;
  • 集群有一个CN会作为中心协调节点(CCN),用于收集和调度作业执行;
  • 管理员用户执行作业不受控制;
  • 简单查询作业不应用自适应负载,需要通过max_active_statements来进行上限控制。

      适用场景:

  • 开启内存自适应以后,不再需要使用work_mem进行算子内存使用调优,多并发场景会出现语句排队的现象
  • 优化器估算不是最优解,依据行数来进行估算会出现语句内存使用量低估或高估的现象。低估时,执行过程当中内存会自动扩展。高估时,会导致系统内存利用不足,排队语句增多,性能无法最优
  • 列存分区表导入会消耗比较多内存资源,属于性能敏感场景,不推荐使用
  • 简单查询作业: 估算值<32MB;非DML(即非INSERT、UPDATE、DELETE和SELECT)语句

4、GaussDB的基本操作

1)数据对象及数据类型

      database:数据库,可以创建多个不同数据库。

      schema:模式,用于管理多个用户使用同一数据库。允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的Schema下而不引起冲突。

      Database和Schema实现业务的隔离,区别在于Database的隔离更加彻底

  • 各个Database之间共享资源极少,可实现连接隔离、权限隔离等,Database之间无法直接互访
  • Schema隔离的方式共用资源较多,可以通过grant与revoke语法便捷地控制不同用户对各Schema及其下属对象的权限

     表空间类型: 普通表空间:默认为ROW表 HDFS表空间:默认为ORC表

2)基本SQL操作

     GaussDB支持的语法有:

  • DDL -- Data Definition Language数据定义语言。 用于定义或修改数据库中的对象。如:表、索引、视图等。 GaussDB不支持CN不完整时进行DDL操作。例如:集群中有1个CN故障时执行新建数据库、表等操作都会失败。
  • DML -- Data Manipulation Language数据操作语言。 用于对数据库表中的数据进行操作。如:插入、更新、查询、删除。
  • DCL -- Data Control Language数据控制语言。 用来设置或更改数据库用户或角色权限的语句。 授权(Grant)、收回权限(Revoke)、设置默认权限(ALTER DEFAULT PRIVILEGES)。

3)数据导入导出

  • 使用COPY命令导入导出数据(数据量少)
  • 使用INSERT命令导入数据(数据量少)
  • 使用gsql元命令导入数据  gsql -p [port] -d [DB] -U [username] -W [passwd] -f [filename]

      INSERT和COPY方式执行数据导入时,是一个串行执行的过程,导入性能低,因此适用于小数据量的导入。对于大数据量的导入,GaussDB支持通过外表并行导入数据到集群。

4)数据库设计

  • 实际业务中,根据需要创建新的Database,不建议直接使用集群默认的postgres数据库;
  • 为了适应全球化的需求,使数据库编码能够存储与表示绝大多数的字符,建议创建Database的时候使用UTF-8编码;
  • 创建Database时,需要重点关注字符集编码(ENCODING)和兼容性(DBCOMPATIBILITY)两个配置项;
  • GaussDB支持Teradata和Oracle两种兼容模式,分别兼容Teradata语法和Oracle语法,不同兼容模式下的语法行为可能有一些差异。
  • Database的owner默认拥有该Database下所有对象的所有权限,包括删除权限。删除权限影响较大,请谨慎使用。

5)模式设计

  • 从便捷性和资源共享效率上考虑,推荐使用Schema进行业务隔离。
  • 建议系统管理员创建Schema和Database,再赋予相关用户对应的权限。

      注意事项:

  • 如果该用户不具有sysadmin权限或者不是该Schema的owner,要访问Schema下的对象,需要同时给用户赋予Schema的usage权限和对象的相应权限。
  • 如果要在Schema下创建对象,需要授予操作用户该Schema的create权限。
  • Schema的owner默认拥有该Schema下对象的所有权限,包括删除权限。删除权限影响较大,请谨慎使用。

6)表设计

     GaussDB有三种表数据存储方式,即行存、列存、ORC存。

     普通表空间:

  • ORIENTATION值为COLUMN,则表的数据将以列式存储;
  • ORIENTATION值为ROW,则表的数据将以行式存储;
  • 若不指定, ORIENTATION默认值为ROW。

     HDFS表空间:表的数据以ORC格式存储。

     分布列的列值应离散分布:

  • 保证数据能够均匀分布到各个DN; 例如,考虑选择表的主键为分布列,选择人员信息表中选择身份证号码为分布列。 在没有主键或没有某一列非常离散的情况下,也可以选择多分布列,以保证数据更均匀的分布到各个DN。
  • 在满足第一条原则的情况下,尽量不要选取存在常量filter的列;
  • 在满足前两条原则的情况,考虑选择查询中连接条件涉及的列为分布列。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。