GaussDB 200概述

一、数据库设计架构

数据库设计架构有三种模式设计:

1、Shared - Disk 各个处理单元使用自己的私有 CPU和Memory,共享磁盘系统。

     典型的代表Oracle RAC,数据共享,可通过增加节点来提高并行处理的能力,扩展能力较好。其类似于SMP(对称多处理)模式,但是当存储器接口达到饱和的时候,增加节点并不能获得更高的性能。

      SMP:SMP的全称是“对称多处理”(Symmetrical Multi-Processing)技术,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构

2、Shared - Everything 一般是针对单个主机,完全透明共享CPU/Memory/IO,并行处理能力是最差的。

      典型的代表是SMP技术

3、Shared - Nothing 各个处理单元都有自己私有的CPU/Memory/硬盘等,不存在共享资源,各处理单元之间通过协议通信,并行处理和扩展能力更好。

      类似于MPP(大规模并行处理)模式,典型代表Greenplum、Vertica,各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转

      MPP:MPP是将多台独立的主机组成集群。显然在此架构下,每个节点都有各自的CPU、内存、IO总线、操作系统,完全松耦合。最关键的是MPP集群中的软件架构也相应的改变了,这样MPP的效率随节点数量增加就可以线性增加了

 

 二、数据处理机制

     数据处理机制主要分为OLAP和OLTP。

     联机事务处理OLTP(on-line transaction processing)

  • 传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易
  • 面向应用:支撑上层数据应用
  • 存储数据量大小:100MB~GB
  • 主要应用:数据库

     联机分析处理OLAP(On-Line Analytical Processing)- GaussDB 200

  • 从原始数据中转化出来的、能够真正为用户所理解的、并真实反映企业多维特性的数据称为信息数据,使分析人员、管理人员或执行人员能够从多种角度对信息数据进行快速、一致、交互地存取,从而获得对数据的更深入了解的一类软件技术
  • 面向主题:主题库的建立,人口库、法人库等
  • 存储数据量大小:100GB~TB
  • 主要应用:数据仓库

三、数据仓库的存储

       用数不规范造成数据冗余,采用数据分层和数据模型规范应用和存储。

  • ODS:Operational Data Store,操作性数据。是作为数据库到数据仓库的一种过渡,ODS的数据结构一般与数据来源保持一致。
  • EDW:Enterprise Data Warehouse,企业数据仓库,保持这所有的从ODS到来的数据,并长期保存,而且这些数据不会被修改。
  • DM:Data Mart,数据集市,为了特定的应用目的或应用范围,而从数据仓库中独立出来的一部分数据,也可称为部门数据或主题数据。最终面向应用。

      移动运营商主要分为BOM域:主要指运营商的B域、O域、M域。

  • B域:业务支撑系统(BSS),依据以客户为中心、以信息为基础的建设方针,通过与运营商的各种业务系统互连,集成相关的客户信息,整合电信帐务管理流程来实现各项功能。总体功能分为:计费帐务、CRM、经营分析、电子渠道四大功能领域及企业数据总线EAI。
  • O域:运营支撑系统(OSS),主要用于电信业务系统的后端运营支撑,通常由网络管理、网元管理、资源管理、业务开通、施工协调等主要系统组成。随着电信的转型,OSS不仅需要满足面向客户的OSS运营支撑,同时也需要逐步满足ICT等新业务的运营支撑。
  • M域:管理支撑系统(MSS),包含了企业门户、协同办公系统、人力资源系统、信息数据管理统计系统等多个模块,其目标是要通过对协同办公、人力资源、工程项目、采购及库存的管理等方面应用的集成,为中国电信的管控流程提供IT支撑。

四、融合数仓

       融合架构

  • 大数据业务广泛实施后,银行开始关注大数据平台与已有数仓平台的融合;
  • 基于数仓建有复杂的数仓模型和大量分析型应用,希望保留原有投资;
  • Hadoop架构因为SQL支持、资源管理、生态等问题,不适合数仓业务;
  • 以数仓为核心,大数据平台作为数仓功能的延伸,进行预处理和供数。

五、GaussDB 200简介

  • 多:超大集群:Shared-Nothing架构+独创的大规模集群通讯技术,最大支持1024节点,支持在线扩容。
  • 快: 并行计算架构:充分利用集群中所有资源,提供极致分析性能,且随着集群规模扩展性能线性增长。 行列混存,极速查询分析:行列混存+向量化执行, 并行Bulk Load,数据快速入库。
  • 好: 全组件HA:无单节点故障,支持跨DC容灾。 租户隔离:租户资源隔离,适合运营商多部门多业务场景。
  • 省: 开放架构:X86、ARM服务器部署,降低TCO。 标准SQL, 平滑应用迁移: 兼容标准ANSI SQL92、SQL2003应用改造小, 提供Oracle、Teradata语法迁移工具。

 

 

  • OM:运维管理模块:提供日常运维、配置管理的管理接口、工具。
  • CM:集群管理模块:管理和监控分布式系统中各个功能单元和物理资源的运行情况,确保系统稳定运行全局事务控制器。
  • CN:协调节点 负责接收来自应用的访问请求,并向客户端返回执行结果。 CN负责分解任务,并调度任务分片在个Data Node上并执行。
  • GTM:全局事务控制器:负责生成和维护全局事务ID、事务快照、时间戳等需要全局唯一的信息。
  • WLM:工作负载管理器:控制系统资源的分配,防止过量业务负载对系统的冲击而导致业务拥塞和系统崩溃。
  • DN:数据节点:负责存储业务数据、执行数据查询任务以及向CN返回执行结果。
  • Storage:服务器的本地存储资源:持久化存储数据。

六、GaussDB 200的高可用

       高可靠主要体现在:

  • 硬件级RAID存储。RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。
  • 交换机堆叠及网卡Bond。堆叠是指将一台以上的交换机组合起来共同工作,以便在有限的空间内提供尽可能多的端口。网卡Bond是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡。通过Bond技术让多块网卡看起来是一个单独的以太网接口设备并具备相同的ip地址。
  • 软件级实例全方位HA(高可用)。
  • CM:集群管理模块。
  • GTM:全局事务控制器。
  • CN:故障CN自动剔除。
  • DN:主、备、从备方案。
  • 双AZ集群模式(主集群和灾备集群)。

1、集群管理模块 - CM

     CM:由CM Agent、OM Monitor和主备CM Server组成。

  • CM Agent:负责监控所在主机上所有实例的运行状态并将状态上报给CM Server。同时只负责执行CM Server下发的仲裁指令。集群的每台主机上均有CM Agent进程。
  • OM Monitor:看护CM Agent的定时任务,其唯一的任务是在CM Agent停止的情况下将CM Agent重启。如果CM Agent重启不了,则整个主机不可用,需要人工干预。
  • CM Server:根据CM Agent上报的实例状态判定当前状态是否正常,是否需要修复,并下发指令给CM Agent执行。

2、全局事务管理 - GTM

      GTM:全局事务管理,负责生成和维护全局事务ID、事务快照、时间戳等全局唯一的信息。

      GTM高可靠采用Active-Standby模式。主故障时,备自动升主继续提供服务,并有相关告警上报进行提示。

3、协调节点 - CN

      CN:负责接收来自应用的访问请求,并向客户端返回执行结果。负责分解任务,并调度任务分片在各DN上并行执行。

      多CN Active-Active模式HA。

  • CN间角色对等,用户连接到任何一个CN上都可以得到一致的结果。 某CN故障时,负载均衡自动将连接负载到其他CN。故障CN上未完成的事务会全部回滚,只需重新执行失败作业。
  • 由于DDL需要更新所有DN上的元数据,所以有CN故障时,整个集群将无法执行DDL,直至CN被修复。为不影响DDL的执行,GaussDB 200支持故障CN自动剔除。

4、数据节点 - DN

      DN:负责存储数据,执行数据查询任务以及向CN返回执行结果。

      DN提供了主、备、从备的高可用方案。主、备、从备部署在不同的集群节点上。

  • 主、备间保持实时同步,主故障时,备自动升主,继续提供服务,并有相关告警上报进行提示。
  • 从备DN不存储数据,只存放备DN故障时主DN同步到从备的Xlog数据。
  • 从备DN为数据的可靠性再加一道保险——备DN故障后,如果在恢复备DN期间,主也故障了,则在备修复后,备升主,并根据从备上的日志进行数据恢复,快速支撑业务运行。

5、双AZ集群

     存在主集群和灾备集群:

  • 主集群提供正常服务,灾备集群只同步数据;
  • 灾备集群不同步数据时,可以提供只读服务;
  • 主集群不可用时,灾备集群提供正常服务。

七、GaussDB 200 数据读写原理

1、数据分布 - 数据存储

      存储步骤:

          1) 解析器从客户端应用获取输入的数据;

          2) 解析器对数据进行解析后,将数据分发给各个处理单元进行处理;

          3) 各个处理单元把接受的记录存储到它自己的逻辑磁盘中;

          4) 每一个处理单元的逻辑磁盘可以是一个磁盘阵列中的多块物理磁盘。

     GaussDB 200采用水平分表的方式,将业务数据表的元组打散存储到各个节点内。查询中通过查询条件过滤不必要的数据,快速定位到数据存储位置,可极大提升数据库性能。

2、数据分布 - Hash分布和Replication复制

     GaussDB 数据库中一般根据分布键的哈希值来确定记录分布在哪个节点上,分布键一般在建表时指定,如果没有指定,系统根据一定规则选择默认字段作为分布键

     复制(Replication)方式 将元组复制到所有节点上。 适用于表数据量较小、需要提升并发分析性能的场景。

3、数据分布 - 数据查询

      步骤:

        1) 解析器将获取到的查询命令分发给各个处理单元;

        2) 各个处理单元并行定位到查询的记录并返回给解析器;

        3) 解析器将查询结果进行合并,将最终查询结果展示到客户端。 

4、行存表 - CTID类型

      GaussDB 200在内部使用行标识符(CTID)记录数据在表中的物理位置。

      CTID是系统表pg_attribute字段ctid的数据类型。

      CTID是一对数值(块号,块内的行索引),它标识该行在其所在表内的物理位置。

5、行存表 - TOAST机制

      为了存储数据量大的字段值,GaussDB 200采用TOAST机制完成数据的存储。

      TOAST :将大的字段值压缩或打碎成多个物理行进行存储的技术,也叫超尺寸属性存储技术。

                      支持的数据类型:变长 (varlena)表现形式的数据类型。

                      触发机制:只有向表中存储超过2KB的字段时才会触发。

                      存储上限:最大存储1GB(230 - 1字节)的数据值。

6、列存表的辅助表 - CUDesc

      CUDesc为行存表,每条记录对应一个CU(60K rows), CUDesc记录CU的辅助和管理信息。

      Min/Max稀疏索引: 记录数据集(60K rows)的最大值和最小值。

7、列存表的压缩

     创建列存表的同时,可以通过COMPRESSION指定压缩模式。

  • WITH(ORIENTATION = COLUMN,COMPRESSION=LOW)。
  • 压缩级别:YES/NO/LOW/MIDDLE/HIGH,默认是LOW。

     列存储压缩支持Delta Value Encoding、Dictionary、RLE 、LZ4、ZLIB等压缩算法,且能够根据数据特征自适应的选择压缩算法。 压缩数据可直接访问,对业务透明,极大的缩短历史数据访问的准备时间。

     适用场景: 对于非活跃的早期数据可以通过压缩来减少空间占用,降低采购和运维成本。

8、数据分区管理

      在一个节点内部对数据按照用户指定的策略对数据做进一步的水平分表,将表按照指定范围划分为多个数据互不重叠的部分(Partition)。用户在CREATE TABLE时增加PARTITION参数,即表示针对此表应用数据分区功能。

  • 水平分表:将表的数据均分
  • 垂直分表:表的记录不多,字段很长,表占用空间大,检索表的时候需要执行大量的IO,严重降低了性能。这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。

改善可管理性

  • 利用分区,可以将表和索引划分为一些更小、更易管理的单元。这样,数据库管理员在进行数据管理时就能采取“分而治之”的方法。
  • 有了分区,维护操作可以专门针对表的特定部分执行。
  • 可提升删除操作的性能 删除数据时可以删除整个分区,与分别删除每行相比,这种操作非常高效和快速。 删除分区表与删除普通表的语法一致,都是通过DROP TABLE语法进行删除。
  • 改善查询性能:通过限制要检查或操作的数据数量,分区可带来许多性能优势。

          分区剪枝:分区剪枝(也称为分区消除)是CN在执行时过滤掉不需要扫描的分区,只对相关的分区进行扫描的技术。分区剪枝通常可以将查询性能提高若干数量级。

          智能化分区联接:通过使用一种称为智能化分区联接的技术,分区还可以改善多表联接的性能。当将两个表联接在一起,并且至少其中一个表使用联接键进行分区时,可以应用智能化分区联接。智能化分区联接将一个大型联接分为多个较小的联接,这些较小的联接包含与联接的表“相同”的数据集。这里,“相同”定义为恰好包含联接的两端中相同的分区键值集,因此可以确保只有这些“相同”数据集的联接才会有效,而不必考虑其他数据集。

八、GaussDB 200 数据导入导出

1、数据并行导入 

      充分利用所有节点的计算能力和I/O能力以达到最大的导入速度。 GaussDB 200的数据并行导入实现了对指定格式(支持CSV/TEXT格式)的外部数据高速、并行入库。

      为了使得数据能够正确、不重复地分配给各DN,保证入库数据的唯一性,GaussDB 200对应提供了三种策略:

  • Normal策略: 利用高斯数据服务工具GDS(Gauss Data Service)来管理用户数据,将集群之外主机上的数据导入到集群中(默认采用该策略),支持CSV、TEXT、FIXED。
  • Shared策略: 利用网络文件系统NFS(Network File System)服务,将存放用户数据的服务器统一挂载到各DN所在主机的相同路径下,将集群之外主机上的数据导入到集群中,支持TEXT 单行数据大小需<1GB。
  • Private策略: 用户自行将数据文件上传到各DN所在主机,支持CSV、TEXT、FIXED 单行数据大小需<1GB。

      FIXED:一种并不常见的文件格式 这些类型的文件主要可以在桌面设备上和某些移动设备上找到。

 2、数据并行导出

      通过外表设置的导出模式、导出数据格式等信息来指定待导出的数据文件,利用多DN并行的方式,将数据从数据库导出到数据文件中,从而提高整体导出性能(暂不支持导出文件到HDFS系统)。

      导出模式:

  • Local模式:将集群中的业务数据导出到集群节点所在主机上。一种专门为大量小文件而定制的一种策略。 数据将被均匀切割并生成到集群节点指定的文件夹下,需占用集群节点的磁盘空间。 支持数据文件格式:TEXT、CSV和FIXED。单行数据大小需<1GB。
  • Remote模式:将集群中的业务数据导出到集群之外的主机上。 支持多个GDS服务并发导出,但1个GDS在同一时刻,只能为1个集群提供导出服务。 配置GDS服务器与集群节点处于同一内网。 导出速率受网络带宽影响,推荐的网络配置为10GE。 支持数据文件格式:TEXT、CSV和FIXED。单行数据大小需<1GB。

九、GaussDB 200 基本功能和技术指标

       基本功能:

  • 标准SQL支持:支持标准的SQL92/SQL2003规范,支持UTF-8、 GBK等字符集,支持SQL标准函数与OLAP分析函数,支持存储过程;
  • 数据库存储管理功能:支持表空间,支持集群在线扩容功能;
  • 可靠性:提供集群管理和数据节点HA 事务支持ACID特性(原子性等)、故障切换、单节点故障恢复、负载均衡等;
  • 应用程序接口:支持标准JDBC 4.0的特性和ODBC 3.5特性;
  • 管理工具:提供安装部署工具、集群启停工具、集群状态监控工具、升级和扩容工具;
  • 安全管理:支持SSL安全网络连接、用户权限管理、密码管理、安全审计等功能,保证数据库在管理层、应用层、系统层和网络层的安全性。

十、GaussDB 200 6.5 新特性介绍

1、逻辑集群

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

     特点:

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

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

2、SQL on Anywhere

     目前面临的痛点和挑战:

  • 大量数据存储于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 200同构数据库之间有两种连接和数据处理方式:

  • 基于EC(Extension Connector)的连接和数据处理。 优点是理论上可以连接任何支持ODBC协议的同构/异构数据库系统; 缺点是配置复杂,数据传输性能低以及查询无法下推到DN执行。(适用于同构、异构数据库连接)
  • 基于Foreign Table的连接和数据处理。 优点是配置简单,数据处理性能高,可以充分利用GaussDB 200的分布式计算能力; 缺点是只能用于GaussDB 200同构数据库系统之间的连接。(适用于同构数据库连接)

       在同构数据库集群连接的场景下,推荐用户使用基于Foreign Table的方式连接数据库集群和处理数据。

十一、GaussDB 200 操作

1、数据对象及数据类型

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

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

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

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

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

     数据对象及数据类型:

     GaussDB 200 数据类型有: 数值类型 货币类型 布尔类型 字符类型 二进制类型 日期/时间类型 几何类型 网络地址类型 位串类型 文本搜索类型 UUID类型 JSON类型 HLL数据类型 对象标识符类型 伪类型

2、基本SQL操作

     GaussDB 200支持的语法有:

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

3、数据导入导出

  • 使用COPY命令导入导出数据(数据量少)
  • 使用INSERT命令导入数据(数据量少)
  • 使用gsql元命令导入数据

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

4、数据库设计

  • 实际业务中,根据需要创建新的Database,不建议直接使用集群默认的postgres数据库;
  • 为了适应全球化的需求,使数据库编码能够存储与表示绝大多数的字符,建议创建Database的时候使用UTF-8编码;
  • 创建Database时,需要重点关注字符集编码(ENCODING)和兼容性(DBCOMPATIBILITY)两个配置项;
  • GaussDB 200支持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 200有三种表数据存储方式,即行存、列存、ORC存。

     普通表空间:

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

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

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

  • 保证数据能够均匀分布到各个DN; 例如,考虑选择表的主键为分布列,选择人员信息表中选择身份证号码为分布列。 在没有主键或没有某一列非常离散的情况下,也可以选择多分布列,以保证数据更均匀的分布到各个DN。
  • 在满足第一条原则的情况下,尽量不要选取存在常量filter的列;
  • 在满足前两条原则的情况,考虑选择查询中连接条件涉及的列为分布列。

7、局部聚簇技术

      局部聚簇(Partial Cluster Key)是列存下的一种技术。

  • 通过min/max稀疏索引快速实现事实表扫描的filter过滤;
  • 一张表上只能建立一个PCK,可以包含多列,但是一般不建议超过2列;局部聚簇一般依据字段值来划分min和max,超过两列则对数据的min和max会有影响,可能无法正确规划min和max的值。
  • 受基表中的简单表达式约束。 这种约束一般形如col op const,其中col为列名,op为操作符 =、>、>=、<=、<,const为常量值。

      选取原则: 尽量采用选择度比较高(过滤掉更多数据)的简单表达式中的列。

      使用原则: 尽量把选择度比较低的约束col放在Partial Cluster Key中的前面; 尽量把枚举类型的列放在Partial Cluster Key中的前面。

8、索引设计

       索引自身也占用存储空间、消耗计算资源,创建过多的索引将对数据库性能造成负面影响(尤其对数据导入性能)。因此,仅在必要时创建索引。

       建立索引基于以下原则:

  • 经常执行搜索的列上创建索引;
  • 经常使用连接的列上创建索引;
  • 经常进行排序的列上创建索引;
  • 经常使用where子句的列上创建索引;
  • 经常使用聚合和去重的列上创建索引;
  • 对于存在多列连接的查询建立组合索引。
  • 主键上会自动创建索引

9、字段设计

在字段设计时,基于查询效率的考虑,一般需要遵循以下原则:

尽量使用高效数据类型: 尽量使用执行效率比较高的数据类型,一般来说整型类型数据运算效率比字符串、浮点数要高(整数>浮点数>NUMREIC)。

尽量使用短字段的数据类型,长度较短的数据类型不仅可以减小数据文件的大小,提升IO性能;同时也可以减小相关计算时的内存消耗,提升计算性能。

当多个表存在逻辑关系时,表示同一含义的字段应该使用相同的数据类型。

对于字符串数据,建议使用变长字符串数据类型,并指定最大长度。 务必确保指定的最大长度大于需要存储的最大字符数。

 

posted @ 2021-01-15 12:57  夏日的向日葵  阅读(6526)  评论(0编辑  收藏  举报