最简单的大数据性能估算方法
大数据的性能是个永恒的话题。但是,在实际工作中我们发现,许多人都不知道如何进行最简单的性能估算,结果经常被大数据厂商忽悠:)。
这个办法在以往也提到过,不过没有以这个题目明确地点出来。
其实很简单,就是算一下这些数据从硬盘上取出来用的时间。除了个别按索引取数的运算外,绝大多数运算都会涉及对数据的整体遍历,比如分组汇总统计、按条件查询(非索引字段);那么,这些运算耗用的时间,无论如何不可能小于硬盘访问的时间,我们就能算出一个理论上的极限值。
比如,有人宣称实现 10T 数据的汇总只需要 3 秒。那么这意味着什么呢?
服务器上常见的 15000 转硬盘,在操作系统下的访问速度也就不到 200M/ 秒,SSD 会快一些,但也没数量级的提升,大概 3 秒读 1G 的样子。这样,从单块硬盘中读出 10T 数据就需要 30000 秒以上,如果想在 3 秒内完成汇总,那就需要 1 万块硬盘!作为用户,你是否做了这个准备呢?
不同硬盘及硬盘在不同环境下的速度不尽相同,可能更快或更慢,但总之都可以用这个简单的办法去估算。不知道自家硬盘的速度?那弄个大文件读一下试试就知道了,拿到实验数据再去计算会更准确。要强调的是,不能简单地看硬盘厂商标称的性能指标,在文件系统下,那个理想值常常连一半都达不到,还是自己实测的最可靠。
这样,我们就能知道某个大数据问题最理想的情况能够达到什么性能,比这个指标更好的期望,在用于估算指标的硬件条件不变的情况下是不可能实现的,没有必要再去琢磨软件产品和技术方案了。
这种估算也指明了一个优化方向,就是减少存储量和访问量。
减少存储量当然不能减少数据本身,用于计算的数据一条也不能少,否则就出现错误结果。减少存储量要靠数据压缩的手段。10T 的原始数据,如果有好的压缩手段,实际在硬盘上存储下来可能只有 1T 甚至更少,这时候 3 秒汇总这些数据就不再需要 1 万块硬盘了。
在存储量不能再减少的情况下,还有些软件手段来减少访问量,常用的方法就是列存。一个数据表有 100 列占了 10T,如果只访问三列进行汇总,那大概只需要访问 300G 数据,这时候 3 秒完成汇总当然也不需要 1 万块硬盘了。
不过,大数据厂商在宣称 10T、3 秒这种性能指标时,一般不会明确指出采用压缩或列存技术后存储量和访问量能降到多少。这就容易给用户造成错觉,以为这个技术能够通用地解决大数据问题,而经常,有些数据的压缩率无法做得很高,对于访问列较多的运算列存也没啥优势。
要更准确地估算性能极限,也要考虑减少存储量和访问量的手段。尝试一下自己的数据能有多大的压缩率(用常规的 zip 软件就可以),并且检查运算是否是从很多列中取出很少列的情况。