数据库分类
传统关系型数据库-RDBMS
传统关系型数据库(RDBMS)历史久远、技术成熟,应用者广泛,因此采用的学习成本和技术风险也相对较低。
典型的RDBMS有Oracle、DB2和MySQL等。
从理论上讲,因为RDBMS能保证数据的立即一致性,因此特别适合OLTP的场景。
然而由于自身的特点所限,RDBMS在可扩展性方面却表现欠佳,很难轻易和低成本低进行线性扩展以处理更大的数据量。
即便现在大多数据库可以通过分库分表等方法来使自己可以容纳更多的数据,但是这种方式也存在着管理复杂和成本高昂等明显短板,因此实际应用中也存在着数据量的天花板。
因此,考虑既定的场景“大数据量下的实时多维OLAP分析”,RDBMS首先就很难跨过“大数据量”这一关。
Massively Parallel Processing 数据库:
大规模并行处理(MPP,massively parallel processing)数据库的代表是Teradata、Greenplum、Vertica和Impala等。
它们的优点是适合将RDBMS的应用扩展到集群范围,以处理更大的数据量,同时继承了RDBMS的很多优点。
然而,它依然没法从根本上满足处理海量数据的需求,因为它的系统性能很难随集群的扩展一直线性增长,所以其集群扩展性有限;
而且它的集群容错性也有限,比如当其Raid磁盘出错后可能会导致其节点响应速度变慢。
ElasticSearch
ElasticSearch 几乎已经是当下实时上的搜索服务器标准,而它与Logstash和Kibana的搭配(简称ELK)也是应用很广的套件组合。
ElasticSearch有很强的文档索引和全文检索的能力,也支持丰富的查询功能(包括聚合查询),并且扩展性好,因此很多用户也常常在拿Elasticsearch和Druid做比较。
然而,在我们的既定场景下,Elasticsearch有着其明显的短板:不支持预聚合;组合查询性能欠佳;等等。
OpenTSDB
OpenTSDB是一款优秀的时序数据库,且基于用户广泛的HBase数据库,因此有着较多的客户群。
它的优势在于查询速度快、扩展性好,且schemaless。
然而,它也有一些缺点:查询的维度组合数量需要提前确定好,即通过存储中的tag组合来确定,因此缺乏了灵活性;
数据冗余度大;
基于HBase,对于运维人员能力要求较高;等等。
kylin
Kylin出自eBay,并且是Apache的新顶级项目,是一款非常不错的分布式OLAP系统。
它的优势在于项目来自于丰富的实践、发展前景光明、直接利用了成熟的Hadoop体系(HBase和Hive等)、cube模型支持较好、查询速度快速等。
但它也在一些方面有着自己的局限,比如:查询的维度组合数量需要提前确定好,不适合即席查询分析;预计算量大,资源消耗多;集群依赖较多,如HBase和Hive等,属于重量级方案,因此运维成本也较高;等等。
Druid
Druid在大数据领域已经不是新人了,因此可能很多读者都已经听说过Druid,甚至用过Druid,但是未必每个人都真正清晰地了解Druid到底是什么,以及在什么情况下可以用Druid。
同时,为了避免大家听了半天,却一直陷在各种细节中但仍然不知道到底在听什么东西,我们还是有必要在开始的时候先总体谈一谈Druid到底是什么。
简单来说,Druid 是一个分布式的、支持实时多维OLAP分析的数据处理系统。
它既支持高速的数据实时摄入处理,也支持实时且灵活的多维数据分析查询。因此Druid最常用的场景就是大数据背景下、灵活快速的多维OLAP分析。
另外,Druid还有一个关键的特点:它支持根据时间戳对数据进行预聚合摄入和聚合分析,因此也有用户经常在有时序数据处理分析的场景中用到它。
Druid用户群能够迅速发展的一个原因是它在大数据背景下集群依然具备优秀的性能和可扩展性。
Imply.io公司是Druid创始人创办的公司,我们可以先通过它公布的一些集群性能介绍图片来概览一下Druid集群的一些特点。