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的列;
在满足前两条原则的情况,考虑选择查询中连接条件涉及的列为分布列。
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!