对MPP数据库与Hadoop之间扩展能力的理解

【摘录】巨杉CTO王涛作为数据库行业的老兵,之前在IBM DB2做过内核研发,现在在大数据行业做分布式数据库SequoiaDB,说说对MPP数据库与Hadoop之间扩展能力的理解。从本质上来说,Hadoop(这里特指HDFS作为分布式文件系统,与Spark+Yarn作为分布式执行)与MPP数据库从通讯机制上来看没有本质的不同。原则上来说,当应用模式完全一样的情况下,经过精心设计的MPP数据库表的扩展性也可以达到上千节点。两者之间最大的区别在于对数据管理理念的不同。HDFS/Hadoop对于数据管理的理念是粗放型管理,以一个文件系统的模式,让用户根据文件夹的层级,把文件一股脑塞到一个分布式文件系统的大池子里面。而当用这些数据的时候,也是以批处理为主,所以每个机器上的文件基本都要从头到尾扫描一遍,所以也不存在太多的物理模型设计与逻辑模型设计。而数据库的本质在于数据管理,需要对外提供在线访问、增删改查等一系列操作。这类型的任务如果还使用粗放型的管理,尽管功能上可以实现但是性能上就会差很多了。譬如说,如果我们想在一大堆数据里面挑拣出符合某个条件的数据,在Hadoop里面会比较粗暴:在所有的机器里面把所有文件从头到尾扫一遍。而使用数据库可以根据分区信息首先落到某个机器里,然后可以根据多维分区甚至落到某个文件上,之后再文件里面的索引数据页上使用树形结构查询,很快就可以定位到记录本身。能够做到这一切的前提是,数据库有一套很完善的数据管理和分布体系,因此查询、操作、更新、插入会非常直观高效。但是,有得必有失,数据库能够做到高效的原因是把这些数据通过相对复杂的层级、分类、索引给管理起来,而Hadoop则通过完全放弃这些限制,获得了极大的自由度,但是丧失了对数据的管控能力。因此,Hadoop号称拥有强大的扩展能力,支持上千节点,也是因为使用这种粗放型的管理方式,只要简单地增加物理机就可以扩大hadoop的存储空间。而对于数据库来说,任何对于集群的改变都涉及到拓扑结构的变更,也可能会涉及到不同机器之间数据的迁移,因此当集群中机器数量多的时候,依然维护复杂的数据管理模型会造成维护成本大幅度上升。例如,在一个1000台机器的集群里面增加100台机器,Hadoop可以简单地添加100个机器即可,其他对于数据块的迁移和平衡会在后台自动完成;而对于数据库来说,添加100个机器如果需要涉及到数据重新平衡的话,需要对每个分区的记录进行重新散列,并且将需要迁移的数据拷贝到目标机器。在这个过程当中,数据的一致性,事务的一致性等因素都需要考虑,因此其设计复杂度和维护难度要远远高于粗放的HDFS。

你可能感兴趣的:(对MPP数据库与Hadoop之间扩展能力的理解)