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

时间:2016-03-02 22:02:45

标签: 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:003,55000:004;

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

1 个答案:

答案 0 :(得分:2)

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

基于行的存储

:每条记录都包含不同的数据类型,因此重复很少

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

您的样本数据:

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

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