Vertica

Vertica 是一款基于列存储的MPP (massively parallel processing)架构的数据库。

它可以支持存放多至PB(Petabyte)级别的结构化数据。

Vertica是由关系数据库大师Michael Stonebraker(2014 年图灵奖获得者)所创建,于2011年被惠普收购并成为其核心大数据平台软件。

简介

Vertica 是真正的纯列式数据库,优化器和执行引擎可以忽略表中与查询无关的列。

Vertica 不仅仅按列式存储数据,还主动地根据列数据的特点和查询的要求选用最佳的算法对数据进行排序和编码压缩,这就极大地降低磁盘I/O 消耗。

同时,Vertica 的执行引擎和优化器也是基于列式数据库设计的,编码压缩过的列数据在Vertica 的执行引擎中进行过滤、关联、分组等操作时不需要解反编码,从而大大降低了CPU 和内存消耗。

Vertica 充分利用列式存储的优点,在保持对前端应用透明的前提下,把数据在集群中的所有节点进行均匀分布的同时,还在多个节点上对同一份数据维护了多个拷贝,确保任意一个扩几个节点出现故障或进入维修状态都不会影响集群的健康状态。

这使得Vertica 拥有类似磁盘RAID 一样高可靠性。

  • 无共享的MPP

架构和真正的列式数据库特性,使Vertica 拥有高性能、高扩展性、高压缩率、高健壮性的特点。

与传统的解决方案相比,Vertica 可以以30%的成本,实现50 倍-1000 倍的性能提高。

优势

  • 列式存储和计算

通过列式计算和强大的主动数据压缩,大幅降低成本高昂的磁盘 I/O(主要是传统的以行为存储单位的SQL 数据库使用), 执行查询的速度可提升 50 到 1000倍,存储成本最高削减 90%。

  • “横向扩展式”大规模并行处理 (MPP)

基于无共享的MPP 架构,支持在线添加数量不限的X86 工业标准服务器,可根据需求任意扩展解决方案。

  • 实时分析

通过内存与磁盘混合存储架构,以及原生支持kafka 消息系统的连接,支持数据实时装载和秒级分析。

  • 数据库内部分析库

开箱即用的数据库内时序插值和关联、事件窗口和会话处理、模式匹配、空间地理分析、文本情感分析等高级分析,以及广义线性回归、逻辑回归、K-Means聚类、朴素贝叶斯分类等常用机器学习和预测分析功能。您也可以获取开源分析库,包括源自 CRAN(综合 R 存档网络)的众多分析功能包。

  • 完整的关系数据库和SQL 标准支持

Vertica 支持关系数据库事务处理和ACID 规范,支持SQL-92/SQL-99/SQL-2003 标准,提供ODBC、JDBC、ADO.NET 接口规范驱动,完全兼容传统关系数据库的开发、使用和管理习惯,可以轻松与现有的ETL 和报表工具集成,保护客户已有的投资。

  • 可扩展的数据库内部分析框架

采用面向用户定义的过程式分析的强大开发框架,实现了对于数据库内部处理的开放式访问。除了使用内置的 SQL 分析和聚合函数外,还可借助 C++/Java/R语言软件开发人员套件 (SDK) 定义自己的定制函数。SDK 功能可保证沙盒安全,并使函数能够并行运行以加快运行速度。 [5]

  • 原生支持Hadoop

Vertica 可以作为SQL 分析引擎直接部署到Hadoop 集群中,直接存取HDFS上的数据;也可以通过标准SQL 直接访问Hive 等管理的数据,并与Vertica 管理的数据进行关联分析;另外Vertica 还提供应用编程接口 (API)支持与MapReduce、Pig 等框架构建结构化、半结构化和非结构化深度融合的大数据分析应用。 [5]

  • 自动实现高可用性

不间断运行,并具有数据复制、故障转移和恢复功能;Vertica 进行了性能优化,并且对业务和运营团队完全透明。 [5]

  • 自动优化和性能管理

通过强大的 API 集合来监控系统的资源、后台进程、工作负载及性能,通过工作负载分析和数据库设计器自动优化数据库,简化系统管理。 [4]

Vertica 数据库与 Cassandra 相比有什么优势?

vertica是传统的关系型数据库,特点是按列存储,而且集成了 MapReduce 支持。

Cassandra 则是属于NoSQL阵营,特点是综合Dynamo的弱一致性模型和Bigtable的数据模型。

它们的比较其实就相当于这两个阵营的对比了,这方面文章不要太多。那么很显然,vertica最大的优势就是它提供了SQL的支持,可以很好的兼容以往的工具和数据,习惯SQL的程序员用起来也爽。传统的SQL语义在高可伸缩性要求下很难实现,如join等操作。

你可以设想一下,如果要join的表都非常大,超出单台机器的处理能力,要高效地完成这个操作该有多困难。

事实上这方面已经有很多学术研究在进行。传统的数据库除了SQL语义外,还要保证transaction的ACID,而要同时满足高一致性和事务操作的要求是很难实现高可伸缩性的。

因而才会有NoSQL的出现,它们牺牲了部分SQL和事务的语义、降低一致性要求,以实现高可伸缩性的系统。

Vertica的底层存储实现和HBase的不一样。虽然都是叫按列存储,HBase是先将表格按行划分成块,在数据块内部才是按列存储;Vertica的存储比较灵活,它号称可以配置哪些列要放在一起存储,每列都分开就是最基本的按列存储,所有列都和在一起就是按行存储了,不过同一列的数据还是会放在一起。

所以按列或者按行存储只是不同的系统设计选择,不是决定性因素。关键还是在于对上层提供的语义。

你如果关心的是执行效率,推荐你一篇论文http://www.cse.nd.edu/~dthain/courses/cse40771/spring2010/benchmarks-sigmod09.pdfHBase,

Cassandra本身只有存储能力,如果要做查询需要借助Hadoop这样的框架进行,Hive就是把查询都编译成Hadoop任务实现的。

Hadoop的查询效率要比关系型数据库要低,主要是因为

1)Hadoop为了保证容错,中间数据都要走一遍磁盘,IO开销大;

2)Hadoop缺少查询优化引擎还有索引等优化机制(有人把Hadoop任务转换成sql语句,

然后再利用传统数据库的优化算法优化http://portal.acm.org/citation.cfm?doid=1755913.1755939)。

Hadoop社区主要关注的是高可伸缩性,性能不行,就加机器呗。

参考资料

Vertica-百度百科

https://www.oschina.net/p/vertica

Vertica 数据库与 Cassandra 相比有什么优势?