本节书摘来自异步社区出版社《NoSQL权威指南》一书中的第2章,第2.6节,作者:【美】Joe Celko(乔•塞科) ,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.6 数据仓库和列式数据库
当只涉及少数列时,数据仓库可以将部分工作负载转移到列式数据库,以提高性能。多维数据库(Multidimensional database,MDB)或多维数据集(cube)是支持非常快速访问预先计算的汇总数据的不同的物理结构。当查询请求MDB大部分列的情况下,MDB将执行相当不错。
这些MDB数据库的物理存储是一个规范化的维度模型,通过存储计算结果消除了连接(join)操作。然而,随着列的增加,MDB会变得巨大,并且增长速度会比预期快。MDB中的数据可以使用与列式数据库大致相同的方式进行压缩,所以从多维数据集中提取列的子集相对容易。
对于列式数据库,最佳工作负载是查询,不去访问所用表的所有列就会有更好的性能表现。在这种情况下,少就是多。所需行的字节数越小,其性能就越好。
总结思考
很多重要的工作负载是与列选择相关的,因此可以在这个模型中获得巨大收益。列式数据库在大数据量、大规模扫描以及I/O密集型查询方面有很好的表现。在提供性能优势的同时,它们还具有独特的压缩其数据的能力。
列式数据库已经存在了一段时间,并在自己的优势方面表现非常好。但是,它们在当前市场得到特别的飞跃有两个原因。第一个原因是硬件改善,尤其是SSD,使得主存储和辅助存储的区别不那么明显。当主存储和辅助存储在性能上存在巨大差别时,在辅助存储内压缩和解压缩数据和在辅助存储外压缩和解压数据是开销巨大的。而在SSD中却没有什么差别。第二个因素是更好的算法。不但专门的压缩很不错,而且还有专为列式数据存储设计的并行算法。