文章目录
- 前言
- 一、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表两种类型。
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表的事务处理系统使用以下三个辅助表:
二、HUGE表的创建
1.创建HUGE表空间
如果不使用默认的表空间(HAMIN),则必须要先创建一个HUGE TABLESPACE(HTS),创建HTS表空间语法如下:
CREATE HUGE TABLESPACE HTS_NAME PATH '/opt/dmdbms/data/DAMENG/htsspace';
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;
另外,在创建表HUGE表时,可以指定表的存储属性,存储属性包括如下几个方面:
- 区大小(一个区的数据行数)
区大小可以通过设置表的存储属性来指定,区的大小必须是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);
- 是否记录区统计信息,即在插入时是否记下其最大值最小值
关于这一点有一个原则,如果这个列经常用作查询条件,并且数据不是很均匀,或者基本是有序的,那么做统计信息是非常有用的,反之则可以不做统计。缺省情况下,为记录区统计信息。如果想不记录,可通过设置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);
- 所属的表空间
创建HUGE表,需要通过存储属性指定其所在的表空间,不指定则存储于默认表空间HMAIN中。HUGE表指定的表空间只能是HTS表空间,例如HTS_NAME为已指定HTS表空间。也可以在创建语句中通过tablespace选项来指定表空间CREATE HUGE TABLE T2 (A INT, B INT) STORAGE(WITH DELTA) tablespace hts_name;
- 文件大小
创建HUGE表时还可以指定单个文件的大小,通过表的存储属性来指定,取值范围为16M~1024*1024M。不指定则默认为64M。文件大小必须是2的多少次方,如果不是则向上对齐。CREATE HUGE TABLE test(name VARCHAR, sno INT) STORAGE (filesize(64));