📜  Teradata压缩

📅  最后修改于: 2021-01-11 11:32:22             🧑  作者: Mango

Teradata压缩

压缩会减小所存储信息的物理大小。压缩的目的是使用最少的位数来准确表示信息。

压缩方法是逻辑的或物理的。物理数据压缩独立于信息的含义重新编码信息,逻辑数据压缩将一组数据替换为另一组更紧凑的数据。

在Teradata中,压缩最多可以压缩255个不同的值,包括NULL。由于减少了存储,Teradata可以在一个块中存储更多记录。由于任何输入操作都可以处理每个块更多的行,因此可以缩短查询响应时间。

可以在使用CREATE TABLE创建表时添加压缩,也可以在使用ALTER TABLE命令创建表后添加压缩。

压缩具有以下必要原因,例如:

  • 降低存储成本。
  • 增强系统性能。

压缩通过每单位物理容量存储更多逻辑数据来降低存储成本。压缩会产生较小的行,从而导致每个数据块存储更多的行,而较少的数据块。

压缩可提高系统性能,因为每行要检索的物理数据较少。压缩数据在内存中时仍保持压缩状态,FSG高速缓存可以容纳更多行,从而减小了磁盘输入的大小。

规则

Teradata压缩方法具有以下规则来压缩存储的数据,例如:

  • 每列只能压缩255个值。
  • 主索引列无法压缩。
  • 易失性表无法压缩。

压缩类型

Teradata数据库使用几种类型的压缩。

Database element Explanation
Column values The storage of those values one time only in the table header, not in the row itself, and pointing to them using an array of presence bits in the row header. It applies to:
  • Multi-value compression
  • Algorithmic compression

We cannot apply either multi-value compression or algorithmic compression to row-level security constraint columns.

Hash and Join indexes A logical row compression in which multiple sets of non-repeating column values are appended to a single set of repeating column values.
This allows the system to store the repeating value set only once, while any non-repeating column values are stored as logical segmental extensions of the base repeating set.
Data blocks The storage of primary table data, or join or hash index subtable data.
Partition containers The auto-compression method set determined by Teradata Database to apply to a container of a column-partitioned table or join index when we have not specified the NO AUTO COMPRESS option at the time the object was created.

多值压缩(MVC)

当我们在列定义的压缩列表中指定值时,多值压缩(MVC)会压缩列中的重复值。

当列中的数据与压缩列表中指定的值匹配时,数据库仅将其存储在表头中一次,无论该列的字段值出现多少次。然后,数据库在该值出现的每一行中存储一个较小的替代值,通常低至2位。

与其他方法相比,MVC提供了最佳的成本和收益比,因为它在查询处理期间需要最少的资源来解压缩数据。我们可以将MVC用于经常使用的数据,而不会影响查询和负载性能。

MVC还被认为是所有压缩方法中最容易实现的。 MVC是逻辑数据压缩形式。

多值压缩具有以下性能影响,例如:

  • 对于大多数配置和工作负载,它缩短了表扫描响应时间。
  • 它提供了中等到很少的CPU节省。

下面的示例为值1、2和3压缩字段Depatment_No。将压缩应用于列时,此列的值不与行一起存储。

取而代之的是,这些值存储在每个AMP的Table标头中。并且仅将存在位添加到该行以指示该值。

CREATE SET TABLE Employee 
( 
   Employee_No integer, 
   First_Name CHAR(10), 
   Last_Name CHAR(10), 
   BirthDate DATE FORMAT 'YYYY-MM-DD-', 
   
   Department_No CHAR(02) COMPRESS(1,2,3) 
) 
UNIQUE PRIMARY INDEX(Employee_No);

当数据移入表中时,系统会自动压缩指定的值,而访问包含的行时,系统会自动将其压缩。

注意

  • 指定COMPRESS时,系统会自动压缩NULL。
  • 并且不能将MVC应用于行级安全性列。

算法压缩

Teradata数据库软件包括UDF形式的几种标准压缩算法,用于按表列压缩多种类型的数据。我们还可以创建UDF格式的自定义压缩和解压缩算法。

如果列值是唯一的,则算法压缩(ALC)会提供比MVC更好的压缩结果。

如果列具有重复的值,则我们可以在同一列上同时使用ALC和MVC,但是系统不会将ALC应用于MVC覆盖的任何值。

注意

  • 为特定列仅指定一组压缩或解压缩UDF。
  • 指定COMPRESS时,系统会自动压缩null。

行压缩

行压缩是逻辑数据压缩的一种形式,其中Teradata数据库只存储一次重复的列值集。

属于该集合的其他非重复列值将存储为基本重复集合的逻辑分段扩展。行压缩是一种无损方法。

像多值压缩一样,访问行压缩数据值也不需要解压缩。

块级压缩

数据块是输入的物理单位,它定义了当我们指定块级压缩(BLC)时Teradata如何处理数据,Teradata以压缩格式存储数据块以节省存储空间。

块级压缩的目标是节省存储空间并减少磁盘输入带宽。块级压缩可以使用更多的CPU来动态地压缩和解压缩数据。因此,是否通过块级压缩来提高查询性能取决于磁盘输入带宽或CPU使用率是否进一步限制了性能。

Teradata数据库提供基于软件和基于硬件的BLC。在DBS控件的“压缩算法”字段中指定压缩算法时,我们选择BLC方法。

  • 基于硬件的块级压缩基于硬件的BLC与其他数据库操作几乎没有CPU资源争用。基于硬件的块级压缩提供与基于软件的块级压缩相同的功能。
  • 基于软件的块级压缩基于软件的BLC设计用于大量很少访问的数据。 BLC还可以跨不同的列类型(包括内部数据结构和行标题)对未知和未分类的数据实现相对较好的压缩。可以使用DBS Control实用程序在系统级别启用块级压缩,而使用SQL DDL在表级别启用块级压缩。

自动压缩

创建列分区表或联接索引时,Teradata Database尝试使用一种或多种方法来压缩数据。除非在创建对象时指定了NO AUTO COMPRESS选项,或者默认设置为NO AUTO COMPRESS,否则它将插入对象的物理行中。

选择适当的压缩方法并将其应用于列分区表或联接索引的物理容器的过程称为“自动压缩”。

自动压缩对于具有单列和COLUMN格式的列分区最有用。

Teradata数据库自动压缩仅适用于COLUMN格式的列分区,然后减小容器大小。或者将其设置为具有以下要求的默认值,例如:

  • 解压缩数据以读取需要最少的CPU资源。
  • Teradata数据库无需解压缩许多值即可找到一个值。

对于某些值,没有适用的压缩技术可以减小物理行的大小,因此Teradata Database不会压缩该物理行的值。尽管如此,系统仍尝试使用可用的自动压缩方法之一来压缩物理行值。

当我们从按列划分的表中检索行时,Teradata Database会自动解压缩所有压缩的列分区值。