为什么基于列的数据库更容易压缩?
Why column-based data bases are easier to compress?
基于行的数据库类似于:
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 次
基于行的数据库类似于:
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 次