CarbonData是华为主导的带索引的列存储文件格式的顶级项目,已经孵化毕业。这个是继麒麟以后又一个由华人主导的阿帕奇顶级开源项目。而且这个项目也是非外企的华人主导的第一个阿帕奇顶级项目。无论从什么角度来说都是一件值得一写的事情。
关于CarbonData到底是什么,我们用该项目的一张图来展现给大家。
简单总结一下,CarbonData这个数据存储模式的主要目标是希望通过存储数据和索引,包括数据内外的索引,,以及引入列组等概念,来做成一个比较通用的存储格式,使得无论是对点查询,范围查询以及类似于OLAP的Star Schema的处理都可以达到比较快的速度。
从技术实现上来讲,一个CarbonData的文件是被一系列blocklet组成的,此外还会加上很多的Metadata,索引,delta等等,这些东西使得对数据的顺讯扫描,以及对某些行的点查询都只需要扫描相应的blocklet,从而达到在不同应用场景下都有比较快的速度。
上图是一个文件格式。关于CarbonData的具体实现,我就不详细讲了。它和现存的两个比较主流的存储格式ORC以及Parquet的比较可能是大家更感兴趣的。
从存储格式和数据模型来讲,Parquet和CarbonData比较接近。CarbonData的早期版本更加接近Parquet。后续的版本则增加了很多的索引的实现。这种做法的好处是对更多的OLAP相关的查询提供了更好的性能。坏处在于需要更多的存储空间。
据我能看到的一些性能比较的数据来看。对大规模的数据量,在TPC-H这样数据仓库的设定场景下,大部分的查询CarbonData能够明显快鱼ORC和Parquet格式的数据源。但是在数据存储空间上来说,Parquet和ORC格式的压缩比大致在30%,数据不同的时候比例略有不同。而CarbonData的压缩比从50%到100%不等,有些情况下其存储格式的大小会超过原始的文本文件。
我想做数据库的人其实都知道任何一个系统的设计就是tradeoff。很多时候多用磁盘就可以让查询更快,反之亦然。这个tradeoff怎么做是比较有讲究的。
就我个人而言,我觉得如果说查询有需求,那么特定格式特定索引加速查询而增加磁盘空间未尝不可。但是也可能是查询没有需求的。所以如果CarbonData的索引不是强制必须要建立的,而是用户可以有选择的建立,那么我会对这个格式更感兴趣。
华为开始进军云计算和大数据市场已经很久了。和国内其他的公司比,华为进军云计算大数据市场有其非常鲜明的特点。这些特点从好的方面看概括下来有这么两点。
第一是华为花费了大量的时间精力加入到各个开源项目里。从OpenStack到Apache,华为对整个开源社区的投入,无论是钱还是人,或者是项目的参与度都是非常的广泛和深入。这种全面拥抱开源社区的方式在中国的企业里面并不多见。
第二华为采取的云计算的策略和其他公司比如说阿里巴巴的并不是很一样。华为的战略上主要是依托自己的行业优势,努力的发展私有云,给大企业提供解决方案。而其公有云的业务在我这个外人看来,近一段时间来才慢慢开始投入。所以华为在商业上的策略,很多时候,也许名气上不如阿里响亮,但是实际赚钱来说,利润更高。
如果说这两点是明确好的,那么下面要聊的一点就是不知道是好还是不好的了。
华为这个公司有很强的传统。它早年的发展过程和微软有类似之处。当公司还是比较小的时候,华为人可以以蚂蚁群战术群策群力的去走别人走过的路,然后让别人无路可走。无论从早年的电线产品,到后来的IT产品线,比如存储,到再后来的手机,都验证了这样的一条路。
这一点类似早年微软,从来都不会最先进入一个领域,但是后进入的时候,会战胜先进入的。不管是浏览器,还是办公软件,差不多都是同样的套路。
但是微软这个公司比较大的问题是,如果没有人指路了,微软自己做的产品,就经常一塌糊涂了。好在家大业大,反正有钱。
再后来,微软发现抄袭都不灵了,不管是抄搜索引擎还是抄手机,都是一败涂地。从这个角度来说,我其实非常能理解,当年微软是个小公司,当然可以用这样的战略。后来微软已经是全球巨无霸的公司了,难道看家本领还是抄抄抄吗?