本文以我个人的理解简单分析下并行数据库的技术要点以及对未来并行数据库的发展做下展望,理解有偏差的地方,欢迎各位指正。
  • 并行数据库的定义

    在维基百科上,并行数据库被定义为通过并行使用多个CPU和磁盘来将诸如装载数据、建立索引、执行查询等操作并行化以提升性能的数据库系统。其中最重要的关键词是并行,分布式。

  • 并行数据库的技术要点

    并行数据库主要由执行引擎、存储引擎和管理功能模块组成,它们的不同技术风格形成了各个有特色的并行数据库产品。随着Hadoop的兴起,目前MPP数据库主要分成两类,一类是传统的MPP 关系型数据库,比如。Greenplum,Vertica等,另外一类是借鉴了MPP并行数据库的设计思想的SQL on Hadoop类的方案,比如Impala,HAWQ,SparkSQL等

    并行数据库比较关键的技术点是存储引擎,而在存储引擎中最重要的就是数据分布按行进行Hash分布是并行数据库的重要特征。其它数据分布方式无法精确控制数据摆放,也无法提供足够的用于查询优化的存储信息。这种紧密耦合的非透明的方式带来了巨大的好处(同样分布的表的高效关联),同时也带来了麻烦(扩展性、高可用等)。

    像一些SQL on Hadoop的方案,比如impala,就充分利用了HDFS的短路读和数据本地性的方式来提升SQL查询的性能。没有解决Hash分布的解决方案都难以处理多个大表关联(Join)的问题,它们多通过预关联的方式来规避这个问题,形成某种类似OLAP多维立方体的解决方案(比如Google Dremel、Mesa,eBayKylin等);或通过shuffle实现重新分布(比如Hive或者SparkSQL)。解决了数据分布以后,就要思考计算好Hash后的数据在一个节点中怎么存。通常三种方式:行、列或者行列混合,所以在这基础上出现了很多列存的文件存储格式,比如ORC,Parquet等,以及支持列模式存储的数据库(比如Greenplum,Vertica等就有支持列模式的存储)。

    最后考虑的是硬件,目前典型的并行数据库多使用SAS磁盘,而HDFS使用的容量更大、价格更便宜但性能和可靠性稍差的SATA磁盘。使用这种慢速的磁盘是并行数据库目前最大的瓶颈,使得它无法实现效率和可扩展高可用的兼得。随着SSD和内存的价格越来越便宜,性能的快速提高,后续面对以SATA接口SSD代替SAS,SATA磁盘的并行数据库,我觉得很快就会到来,现在一些高端的并行数据库一体机就已经可以采用全部SSD的配置了,用硬件来解决软件的问题是最直接有效的方式。

  • 未来展望

随着云计算技术的发展,我认为以后以云的方式提供数据库服务会越来越多,无论是企业内部的私有云还是对外的公有云。比如AWS RedShift和Openstack Trove (DBaaS)。这给数据库软件带来的变化是它需要支持越来越大的集群,技术难度加大但经济性更好。这也要求要具备更好的管控能力。数据库软件需要越来越为大规模集群设计。因此我认为,在上述趋势的发展之下。并行数据库的软件模块或者叫组件的分工会越来越细化。以前只有主节点和数据节点两类。有的数据库找一些空的数据节点来作为装载节点。那么未来接入节点、协调节点、元数据节点、日志节点、安全节点、SQL解析和优化节点、数据装载和导出节点、数据节点可能会被单独分析出来(数据节点的对等性必须得到保护)。并且这些组件的实例均需要支持通过软件的方式灵活配置数量等,而不是写到代码之中。在架构设计之初就考虑并行、负载分担和可扩展等。组件之间通过Zookeeper之类的方式进行协调,实现高可用,松耦合,屏蔽内部细节。

小结

1、 随着云的发展,无论是公有云还是私有云,并行数据库可能会发展的越来越大,专业性更加强。

2、 随着SSD和内存的价格越来越便宜,内存可能会成为数据读写的主要发生点,这将有效的解决当前计算与存储紧密结合的并行数据库的难题。

©著作权归作者所有:来自51CTO博客作者mob604756ec296f的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. PDO连接数据库实例
  2. JDBC【1】--初级增删改查
  3. 脑补|yarn能并行运行任务总数~
  4. ThinkPHP框架:数据库链表查询和导航渲染(导航数据递归生成)
  5. 初识TiDB
  6. EXCEL连通数据库,供应链进度追踪效率倍增
  7. 数据库中间件 MyCat1.6 安装使用(docker版)
  8. PHP数据库操作:PDO基本操作
  9. 常用数据库操作指令

随机推荐

  1. php调试利器:FirePHP的安装与使用
  2. PHP Redis相关操作大全
  3. 高级PHP工程师必备的编码技巧及思维
  4. PHP的isset()、is_null、empty()使用总结
  5. PHP上传图片到数据库并显示
  6. PHP开发常见功能实现流程
  7. PHP 文字生成透明图片之路
  8. php技巧:在实例中调用 Invoke 类型的类
  9. 这三个难的PHP知识点,你都会了吗?
  10. PHP使用Screw把源代码加密