对于每个压缩分段和每个压缩的非分段表,都存在一个单独的压缩字典。对于每个压缩分段、每个压缩的非分段表、数据库空间中的每个压缩简单大对象和每个压缩索引分区,都存在一个单独的压缩字典。每个压缩字典是由分段或表数据中经常出现的模式和替换这些模式的符号数构成的库。
压缩字典是使用从至少包含 2,000 行的分段或非分段表随机采样的数据构建的。如果分段或表中包含的行数不足 2,000,那么 GBase 8s 不会构建压缩字典。
压缩字典最多可存储 3,840 个模式,每个模式的长度可以为 2 到 15 个字节。(超过 7 个字节的模式将减少字典可包含的模式的总数。)这些模式中的每一个都通过压缩行中的 12 位符号数来表示。要进行压缩,输入行映像中的一系列字节必须精确匹配字典中的某个完整模式。如果行与字典匹配的模式不足,那么可能无法压缩,因为不完全匹配的输入行中的每个字节在压缩映像中都将替换为 12 位(1.5 个字节)。
GBase 8s 尝试捕获最佳的可压缩模式(模式频率乘以长度)。数据通过以下方法压缩:将出现的模式替换为字典中的相应符号数,并将出现的不匹配任何模式的字节替换为特别保留的符号数。
数据库空间中表或分段的所有字典都存储在该数据库空间中一个隐藏的字典表内。sysmaster 数据库中的 syscompdicts_full 表和 syscompdicts 视图提供有关压缩字典的信息。
通常需要大约 100 KB 的空间来存储压缩分段或表的压缩字典。因此,太小的表不适合压缩,因为可能无法通过压缩行来收回足够抵销压缩字典存储花费的空间。
此外,GBase 8s 不能将单个行压缩到长度小于 4 个字节。这是因为服务器必须留出一些空间,以免行映像稍后增长到超过了页面可容纳的程度。因此,不得尝试压缩带有包含 4 个或更少字节的行的分段或非分段表。