Amazon redshift 为什么基于列的数据库更容易压缩?

Amazon redshift 为什么基于列的数据库更容易压缩?,amazon-redshift,Amazon Redshift,基于行的数据库类似于: 001:10,Smith,Joe,40000; 002:12,Jones,Mary,50000; 003:11,Johnson,Cathy,44000; 004:22,Jones,Bob,55000; 10:001,12:002,11:003,22:004; Smith:001,Jones:002,Johnson:003,Jones:004; Joe:001,Mary:002,Cathy:003,Bob:004; 40000:001,50000:002,44000:00

基于行的数据库类似于:

001:10,Smith,Joe,40000;
002:12,Jones,Mary,50000;
003:11,Johnson,Cathy,44000;
004:22,Jones,Bob,55000;
10:001,12:002,11:003,22:004;
Smith:001,Jones:002,Johnson:003,Jones:004;
Joe:001,Mary:002,Cathy:003,Bob:004;
40000:001,50000:002,44000:003,55000:004;
基于列的数据库类似于:

001:10,Smith,Joe,40000;
002:12,Jones,Mary,50000;
003:11,Johnson,Cathy,44000;
004:22,Jones,Bob,55000;
10:001,12:002,11:003,22:004;
Smith:001,Jones:002,Johnson:003,Jones:004;
Joe:001,Mary:002,Cathy:003,Bob:004;
40000:001,50000:002,44000:003,55000:004;

为什么像RedShift这样的服务声称能够更好地压缩数据?或者更一般地说,为什么基于列的数据库似乎支持压缩?这两种格式似乎都可以轻松压缩。

几乎所有的压缩算法都利用了一个事实,即某些数据是重复的,因此可以压缩:

在行存储中:每个记录都由不同的数据类型组成,因此很少有重复

在基于列的存储中:每个记录由相同类型的值组成,通常包含重复的值

对于您的示例数据:

基于行的数据库中的所有行都不同,无法消除重复


在列中-至少姓氏有
Jones
2次,因此压缩算法不需要存储2次,而是可以存储一次,并在第二次出现时提供一些参考(较小)

几乎所有压缩算法都利用了一个事实,即某些数据是重复的,因此可以进行压缩:

在行存储中:每个记录都由不同的数据类型组成,因此很少有重复

在基于列的存储中:每个记录由相同类型的值组成,通常包含重复的值

对于您的示例数据:

基于行的数据库中的所有行都不同,无法消除重复


在列中-至少姓氏有
Jones
2次,所以压缩算法可以不存储2次,而是存储一次,并在第二次出现时提供一些参考(较小)。所以它是基于一列中存在规则性的假设。@0是的,通常这个假设是正确的,数据越均匀,压缩效果越好。所以它是基于列中存在规则性的假设。@zero是的,通常这种假设是正确的,数据越均匀,压缩效果越好