具有跨行相似性的 VARCHAR 良好编码
Good encoding for VARCHAR with similarity across rows
什么是 VARCHAR 列的良好 Amazon Redshift 列编码,其中每行包含一个短值(通常为 50-100 个字符),几乎没有重复,但各行之间的相似度很高? (特别是相同的前缀。)
令人抓狂的简洁 LZO description 听起来就像 LZO 被单独应用于每个值。在那种情况下,行之间将没有共享字典,并且几乎没有可利用的共性。 OTOH,如果将 LZO 应用于写入磁盘的整个 1 MB 值块,它会表现良好。
Byte Dictionary 听起来它只在值相同而不是相似时才产生节省,所以不是一个好的选择。
按块应用压缩,这意味着 LZO
几乎总是 VARCHAR
的正确选择。大多数其他替代方案要求值要么与其他值完全相同(例如 BYTEDICT
、RUNLENGTH
),要么是数字(例如 DELTA
、MOSTLY8
)。
VARCHARS
的唯一替代方案是 TEXT255
/TEXT32K
,它可能适用于您的用例。他们构建前 N 个单词的字典(TEXT255
为 245 个,TEXT32K
为变量),并用单字节索引替换这些单词的出现。如果您的价值观共享很多词,那么 TEXT255
可能比 LZO
.
更有效
什么是 VARCHAR 列的良好 Amazon Redshift 列编码,其中每行包含一个短值(通常为 50-100 个字符),几乎没有重复,但各行之间的相似度很高? (特别是相同的前缀。)
令人抓狂的简洁 LZO description 听起来就像 LZO 被单独应用于每个值。在那种情况下,行之间将没有共享字典,并且几乎没有可利用的共性。 OTOH,如果将 LZO 应用于写入磁盘的整个 1 MB 值块,它会表现良好。
Byte Dictionary 听起来它只在值相同而不是相似时才产生节省,所以不是一个好的选择。
按块应用压缩,这意味着 LZO
几乎总是 VARCHAR
的正确选择。大多数其他替代方案要求值要么与其他值完全相同(例如 BYTEDICT
、RUNLENGTH
),要么是数字(例如 DELTA
、MOSTLY8
)。
VARCHARS
的唯一替代方案是 TEXT255
/TEXT32K
,它可能适用于您的用例。他们构建前 N 个单词的字典(TEXT255
为 245 个,TEXT32K
为变量),并用单字节索引替换这些单词的出现。如果您的价值观共享很多词,那么 TEXT255
可能比 LZO
.