网易视频云:Infobright初探
网易砷啼硎实视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,为客户提供稳定流畅、低时延、高并发的视频直播、录制、存锈橡馐淞储、转码及点播等音视频的PaaS服务。在线教育、远程医疗、娱乐秀场、在线金融等各行业及企业用户只需经过简单的开发即可打造在线音视频平台。现在,网易视频云与大家分享一下Infobright。
Infobright是一个有多年历史的开源的adhoc数据仓库软件。它首次发布于2005年,并于2008年开源社区版本。并在2009年成为MySQL合作伙伴,并集成到MySQL中。
Infobright虽然集成到MySQL中,默认有一个BrightHouse引擎,但是与InnoDB/MyISAM这类引擎不同在于,Infobright有自己的查询优化层,它仅仅是利用的MySQL原有的一些查询解析以及重写机制。
B树一般使用二分查找的方式从根节点到叶子节点定位纪录。当索引能完全存储在内存中时,索引查询的速度会非常的快。然而当索引需要内外存换入换出时,性能会有明显的下降。不仅是性能,B树索引本身占用的空间也相对较大,常见的索引键构成为索引列加行号或者是索引列加主键,一条索引键对应一条记录,当数据库使用不当,或者是为查询建立过多索引或者索引中含有过多的列时,索引本身的体积会很快成为一个现实的问题。此外,B树索引也不适合unique键值较少的列(效率低),同时也不支持前导模糊查询。所以B树索引最适合的是小数据量的OLTP场景。
Infobright为OLAP设计,它没有索引的概念,而是利用知识网格进行数据的筛选,从而达到降低数据访问代价的目的。在说明知识网格之前首先需要说明一些基础的概念:
1.DataPack(DP):BrightHouse引擎将数据按照64k行的大小切分成一个个Rough rows,Rough rows根据列由分为一个个DP,DP是BrightHouse底层的数据存储单元,也是基本压缩解压单元。
2.DataPackNode(DPN):一个DPN与一个DP对应,存储了一些基本信息,最大值,最小值,平均值、记录值总和,null值的数量以及记录的总数量。3.Knowlege Node(KN):相比DPN更高层次的一些智能化的信息,包括有直方图、字符位图、pack-to-pack。
现实中,数据对于上述的三种KN的影响较大,比如HIST中数据的稠密性,并且列内的DP之间的依赖关系没有涉及,根据机器学习或者数据挖掘的理论,尚可引入更多的信息来帮助加速查询。
在一个拥有Salary,Age, Job, State四列组成的表中进行查询,查询条件中4列的都进行了限制,并且用And连接,根据DPN、HIST,CMAPs的帮助下,很快能划分出表中的无关DP(红色)、强相关DP(绿色)、待定DP(黄色),因为是AND条件,所以能看到Salary(1), Salary(2), Salary(4)这三个DP对应的行都无法满足查询条件,因此只需要考虑Salary(3)这个DP对应的行,又由于Salary (3), Age(3), Job(3)都是强相关,只有State(3)是待定,因此只需要解压State(3)即可。
再来看一个真实的查询,看一下知识网格是如何进行DP筛选的:
Query: SELECT MIN(T'.D) FROM T , T' WHERE T.A > 15 AND T.B = T'.C;
Infobright依靠强大的知识网格以及高效的列式压缩在大数据量的环境下提供高效的批量查询服务。目前IB的营销策略和MySQL一样提供免费的社区版以及收费昂贵的企业版。不过不如MySQL厚道的是,Infobright社区版的功能被阉割严重,例如不支持DML语句,不支持并发导入数据,不支持并发查询,这使得社区版的实用价值大打折扣。虽然开源版功能打折,并且在使用上有诸多注意点(见附注),不过作为列存数据仓库的技术以及源码研究来说依然是相当有价值的产品。
附注:
1.Infobright不能使用MySQL的query cache,在多次执行相同的SQL时,Infobright会缓存那些已经解压的Pack以及知识网格,因此可以大幅减少访问开销(主要是解压)
2.Infobright对binary/varbinary/float/double/text等类型的数据没有做过多的优化
3.Infobright尽量将一切数据转化为Integer进行实际存储,这也是在一些unique值不多的char/varchar列,IB可以声明LookUp关键词将字符转化为整形以提高压缩率,但如果unique值超过10000,会影响查询速度
4.Infobright的外存存储,每张表都有独立的目录
5.Infobright的一张表的行数上限是140.7兆,列数上限是100000
6.Infobright目前只支持关库拷贝文件的冷备及恢复
7.Infobright只支持HashJoin
8.由于知识网格文件关系到查询速度,因此在内存不足的情况下有条件使用SSD专门存储这些文件