文章目录

  • 前言
  • 一、HUGE表的基本原理
  • 1.HUGE表的存储结构
  • 2.HUGE表类型
  • 3.HUGE辅助表
  • 二、HUGE表的创建
  • 1.创建HUGE表空间
  • 2.创建HUGE表



前言


随着大数据时代的到来,在数据库应用方面以海量数据查询为主的分析型需求大量出现。为了满足这一需求,达梦数据库实现了Huge File System(检查 HFS)存储机制,是一种针对海量数据进行分析的高效、简单的以列方式进行存储的存储机制。在HFS存储机制的基础上,达梦引入了列存储表的概念,简称HUGE表。


一、HUGE表的基本原理

1.HUGE表的存储结构

HUGE表的存储并不是创建在普通表空间和数据文件上,而是必须建立在其特有的HTS(HUGE TABLESPACE,即HUGE表空间)表空间上。这种HTS表空间区别于普通表空间,不是以段、簇、页的形式管理的,而是以一个文件系统的形式来管理的。创建一个HTS表空间,实际上是创建一个对应的文件目录。当HUGE表中插入数据后,系统会在生成的空目录下创建以“模式-表-列”目录结构来存储的数据文件。

对于每一个数据文件,其内部存储是按照区来进行管理的,区是文件内部数据管理的最小单位,也是唯一的单位。在创建表时可以设置一个区中可以存储单列数据的行数,一旦设置后就不能再修改

2.HUGE表类型

HUGE表分为非事务型 HUGE表和事务型HUGE表两种类型。

springboot 达梦 数据隔离级别 hibernate 达梦数据库_数据库


springboot 达梦 数据隔离级别 hibernate 达梦数据库_数据_02

3.HUGE辅助表

每个HUGE表都会有一个相应的AUX辅助表来管理其数据,辅助表是系统自动生成的。可以通过查看AUX辅助表来查看HUGE表数据的基本信息。主要包括以下四个辅助表:

·AUX辅助表(主辅助表)

AUX辅助表是在创建HUGE表时系统自动创建的,用来管理以及辅助系统用户操作HUGE表文件中存储的数据。表名为“HUGE表名AUX”,如果该HUGE表为分区表,则辅助表名为“子表名AUX”。
一条记录对应文件中的一个数据区,包括下面15列:
1.COLID:表示当前这条记录对应的区所在的列的列ID号;
2.SEC_ID:表示当前这个记录对应的区的区ID号,每一个区都有一个ID号,并且唯一;
3.FILE_ID:表示这个区的数据所在的文件号;
4.OFFSET:表示这个区的数据在文件中的偏移位置,4K对齐;
5.COUNT:表示这个区中存储的数据总数(有可能包括被删除的数据);
6.ACOUNT:表示这个区中存储的实际数据行数;
7.N_LEN:表示这个区中存储的数据在文件中的长度,4K对齐的;
8.N_NULL:表示这个区中的数据中包括的NULL值的行数;
9.N_DIST:表示这个区中所有数据互不相同的行数;
10.CPR_FLAG:表示这个区是否压缩;
11.ENC_FLAG:表示这个区是否加密;
12.CHKSUM:用来较验的,该功能暂未启用;
13.MAX_VAL:表示这个区中的最大值,精确值;
14.MIN_VAL:表示这个区中的最小值,精确值;
15.SUM_VAL:表示这个区中所有值的和,精确值。
前面7列是用来控制数据存取的,根据这些信息就可以知道这个区的具体存储位置、长度及基本信息。后面8列都是用来对这个区进行统计分析的。其中,COLID和SEC_ID的组合键为辅助表的聚集关键字。

·事务型辅助表

为了辅助HUGE表的事务处理系统使用以下三个辅助表:

springboot 达梦 数据隔离级别 hibernate 达梦数据库_表名_03

二、HUGE表的创建

1.创建HUGE表空间

如果不使用默认的表空间(HAMIN),则必须要先创建一个HUGE TABLESPACE(HTS),创建HTS表空间语法如下:

CREATE HUGE TABLESPACE HTS_NAME PATH '/opt/dmdbms/data/DAMENG/htsspace';

springboot 达梦 数据隔离级别 hibernate 达梦数据库_表空间_04

2.创建HUGE表

在创建HUGE表时,根据WITH|WITHOUT DELTA区分创建非事务型HUGE表还是事务型HUGE表。指定WITH DELTA,创建事务型HUGE表;指定WITHOUT DELTA,则创建非事务型HUGE表,缺省为WITHOUT DELTA。

创建事务型HUGE表T1

CREATE HUGE TABLE T1 (A INT, B INT) STORAGE(WITH DELTA) tablespace hts_name;

springboot 达梦 数据隔离级别 hibernate 达梦数据库_数据库_05


另外,在创建表HUGE表时,可以指定表的存储属性,存储属性包括如下几个方面:

  1. 区大小(一个区的数据行数)
    区大小可以通过设置表的存储属性来指定,区的大小必须是2的多少次方,如果不是则向上对齐。取值范围:1024行~1024*1024行。默认值为65536行。例如,创建HUGE表test,指定区的大小为2048,其它默认。
    CREATE HUGE TABLE test(name VARCHAR, sno INT) STORAGE(SECTION (2048)); 例如,创建HUGE表test,所有列都采用默认值。
    CREATE HUGE TABLE test(name VARCHAR, sno INT);
  2. 是否记录区统计信息,即在插入时是否记下其最大值最小值
    关于这一点有一个原则,如果这个列经常用作查询条件,并且数据不是很均匀,或者基本是有序的,那么做统计信息是非常有用的,反之则可以不做统计。缺省情况下,为记录区统计信息。如果想不记录,可通过设置STAT NONE实现。例如,创建HUGE表test,通过列存储属性指定统计信息属性(不记录区统计信息)。
    CREATE HUGE TABLE test(name VARCHAR STORAGE (STAT NONE), sno INT); 又如,创建HUGE表test,通过表存储属性指定统计信息属性(不记录区统计信息)。
    CREATE HUGE TABLE test(name VARCHAR, sno INT) STORAGE (STAT NONE);
  3. 所属的表空间
    创建HUGE表,需要通过存储属性指定其所在的表空间,不指定则存储于默认表空间HMAIN中。HUGE表指定的表空间只能是HTS表空间,例如HTS_NAME为已指定HTS表空间。也可以在创建语句中通过tablespace选项来指定表空间CREATE HUGE TABLE T2 (A INT, B INT) STORAGE(WITH DELTA) tablespace hts_name;
  4. 文件大小
    创建HUGE表时还可以指定单个文件的大小,通过表的存储属性来指定,取值范围为16M~1024*1024M。不指定则默认为64M。文件大小必须是2的多少次方,如果不是则向上对齐。
    CREATE HUGE TABLE test(name VARCHAR, sno INT) STORAGE (filesize(64));