文件名称:列式存储与压缩-htrc110 用户手册
文件大小:1.33MB
文件格式:PDF
更新时间:2024-06-30 06:35:46
分布式
3.10 列式存储与压缩 列式存储主要应用在数据仓库类的应用,列式存储将同一个列的数据存放在一起,同一 个列里面按照行有序。由于同一个列的数据重复读很高,列式存储压缩时有很大的优势,比 如 Google Bigtable 列式存储对网页库压缩可以达到 10~15 倍的压缩率。而且,数据仓库类应 用本身就是按照列来访问的,比如查询来自湖南的用户请求个数。由于用户的读写操作使用 的 SQL 语句是按照行的顺序,列式存储在实现更新操作事务性,读取某一行等普通的数据 库操作相对比较麻烦。 压缩是一个专门的研究课题,没有通用的做法,需要根据数据的特点选择或者自己开发 新的算法。压缩的本质就是找数据的重复或者规律,用尽量少的字节表示。压缩算法一般有 一个窗口的概念,在窗口的内部找重复或者规律。存储系统在选择压缩算法的时候有两个考 虑点:压缩比和效率。读操作需要先读取磁盘中的内容再解压缩,写操作需要先压缩再将压 缩结果写入到磁盘,整个操作的延时包括压缩/解压缩和磁盘读写的延迟,压缩比也大,磁 盘读写的数据量越大,相应地压缩/解压缩的时间也长,所以这里需要一个很好的权衡点。 压缩算法的设计和选择远超出我的能力范围,常用的压缩算法有 gzip,lzo,lzw。在 Google 的 Bigtable 系统中,设计了 Zippy 和 BMDiff 两种压缩算法。Zippy 是和 LZW 类似的。Zippy 并 不像 LZW 或者 gzip 那样压缩比高,但是他处理速度非常快。BMDiff 压缩速率可达到 100MB ~ 200MB,解压缩速率达到 400MB ~ 1000MB,压缩近似度高的数据压缩比也很不错。可见 压缩算法的选择不能仅仅看压缩比,还要看算法执行效率。