ClickHouse概述

0 - 发展历史

Yandex在2016年6月15日开源了一个数据分析的数据库,名字叫做ClickHouse,这对保守俄罗斯人来说是个特大事。更让人惊讶的是,这个列式存储数据库的跑分要超过很多流行的商业MPP数据库软件,例如Vertica。如果你没有听过Vertica,那你一定听过 Michael Stonebraker,2014年图灵奖的获得者,PostgreSQL和Ingres发明者(Sybase和SQL Server都是继承 Ingres而来的), Paradigm4和SciDB的创办者。Michael Stonebraker于2005年创办Vertica公司,后来该公司被HP收购,HP Vertica成为MPP列式存储商业数据库的高性能代表,Facebook就购买了Vertica数据用于用户行为分析。

1 - 特性

在看Clickhouse运行场景之前要了解技术的功能特性以及弊端是一个技术架构以及开发人员所要了解的。只有”知己知彼”才可以”百战不殆”,接下来我们看一下Clickhouse的具体特点:

  1. 真正的面向列的DBMS;
  2. 数据高效压缩;
  3. 磁盘存储的数据;
  4. 多核并行处理;
  5. 在多个服务器上分布式处理;
  6. SQL语法支持;
  7. 向量化引擎;
  8. 实时数据更新;
  9. 索引;
  10. 适合在线查询;
  11. 支持近似预估计算;
  12. 支持嵌套的数据结构;
  13. 支持数组作为数据类型;
  14. 支持限制查询复杂性以及配额;
  15. 复制数据复制和对数据完整性的支持;

1.1 - 真正的面向列的DBMS

在一个真正的面向列的DBMS中,没有任何“垃圾”存储在值中。例如,必须支持定长数值,以避免在数值旁边存储长度“数字”。例如,十亿个UInt8类型的值实际上应该消耗大约1 GB的未压缩磁盘空间,否则这将强烈影响CPU的使用。由于解压缩的速度(CPU使用率)主要取决于未压缩的数据量,所以即使在未压缩的情况下,紧凑地存储数据(没有任何“垃圾”)也是非常重要的。

因为有些系统可以单独存储单独列的值,但由于其他场景的优化,无法有效处理分析查询。例如HBase,BigTable,Cassandra和HyperTable。在这些系统中,每秒钟可以获得大约十万行的吞吐量,但是每秒不会达到数亿行。

另外,ClickHouse是一个DBMS,而不是一个单一的数据库。ClickHouse允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服务器。

1.2 - 数据压缩

一些面向列的DBMS(InfiniDB CE和MonetDB)不使用数据压缩。但是,数据压缩确实提高了性能。

1.3 - 磁盘存储的数据

许多面向列的DBMS(SAP HANA和GooglePowerDrill)只能在内存中工作。但即使在数千台服务器上,内存也太小。

1.4 - 多核并行处理

多核多节点并行化大型查询。

1.5 - 在多个服务器上分布式处理

上面列出的列式DBMS几乎都不支持分布式处理。在ClickHouse中,数据可以驻留在不同的分片上。每个分片可以是用于容错的一组副本。查询在所有分片上并行处理。这对用户来说是透明的。

1.6 - SQL支持

如果你熟悉标准的SQL,我们不能真正谈论SQL的支持。NULL不支持。所有的函数都有不同的名字。JOIN支持。子查询在FROM,IN,JOIN子句中被支持;标量子查询支持。关联子查询不支持。

1.7 - 向量化引擎

数据不仅按列存储,而且由矢量 - 列的部分进行处理。这使我们能够实现高CPU性能。

1.8 - 实时数据更新

ClickHouse支持主键表。为了快速执行对主键范围的查询,数据使用合并树(MergeTree)进行递增排序。由于这个原因,数据可以不断地添加到表中。添加数据时无锁处理。

1.9 - 索引

例如,带有主键可以在特定的时间范围内为特定客户端(Metrica计数器)抽取数据,并且延迟时间小于几十毫秒。

1.10 - 支持在线查询

这让我们使用该系统作为Web界面的后端。低延迟意味着可以无延迟实时地处理查询。

1.11 - 支持近似计算

  • 系统包含用于近似计算各种值,中位数和分位数的集合函数;
  • 支持基于部分(样本)数据运行查询并获得近似结果。在这种情况下,从磁盘检索比例较少的数据;
  • 支持为有限数量的随机密钥(而不是所有密钥)运行聚合。在数据中密钥分发的特定条件下,这提供了相对准确的结果,同时使用较少的资源;

1.12 - 数据复制和对数据完整性的支持

使用异步多主复制。写入任何可用的副本后,数据将分发到所有剩余的副本。系统在不同的副本上保持相同的数据。数据在失败后自动恢复。

2 - ClickHouse的不完美

  • 不支持事务;
  • 不支持Update/Delete操作;
  • 支持有限操作系统;
    现在支持ubuntu,centos,需要自己编译,不过有热心人已经编译好了,拿来用就行。对于Windows不支持。

3 - ClickHouse应用场景

自从ClickHouse2016年6月15日开源后,ClickHouse中文社区随后成立。中文开源组开始以易观、海康威视、美团、新浪、京东、58、腾讯、酷狗音乐和俄罗斯开源社区等人员组成,随着开源社区的不断活跃,陆续有神州数码,青云,PingCAP,中软国际等公司成员加入以及其他公司成员加入。初始在群里讨论技术后续有一些大型公司陆续运用到项目中,介于分享不方便问题解决,建立了相应的论坛。根据交流得知一些大公司已经运用。

3.1 - 可以应用于以下场景

  • 电信行业用于存储数据和统计数据使用;
  • 新浪微博用于用户行为数据记录和分析工作;
  • 用于广告网络和RTB,电子商务的用户行为分析;
  • 信息安全里面的日志分析;
  • 检测和遥感信息的挖掘;
  • 商业智能;
  • 网络游戏以及物联网的数据处理和价值数据分析;

最大的应用来自于Yandex的统计分析服务Yandex.Metrica,类似于谷歌Analytics(GA),或友盟统计,小米统计,帮助网站或移动应用进行数据分析和精细化运营工具,据称Yandex.Metrica为世界上第二大的网站分析平台。ClickHouse在这个应用中,部署了近四百台机器,每天支持200亿的事件和历史总记录超过13万亿条记录,这些记录都存有原始数据(非聚合数据),随时可以使用SQL查询和分析,生成用户报告。

4 - ClickHouse 和一些技术的比较

4.1 - 商业OLAP数据库

例如:HP Vertica, Actian the Vector。
区别:ClickHouse是开源而且免费的。

4.2 - 云解决方案

例如:亚马逊RedShift和谷歌的BigQuery
区别:ClickHouse可以使用自己机器部署,无需为云付费

4.3 - Hadoop生态软件

例如:Cloudera Impala, Spark SQL, Facebook Presto , Apache Drill
区别:

  • ClickHouse支持实时的高并发系统
  • ClickHouse不依赖于Hadoop生态软件和基础
  • ClickHouse支持分布式机房的部署

4.4 - 开源OLAP数据库

例如:InfiniDB, MonetDB, LucidDB
区别:这些项目的应用的规模较小,并没有应用在大型的互联网服务当中,相比之下,ClickHouse的成熟度和稳定性远远超过这些软件

4.5 - 开源分析,非关系型数据库

例如:Druid , Apache Kylin
区别:ClickHouse可以支持从原始数据的直接查询,ClickHouse支持类SQL语言,提供了传统关系型数据的便利

5 - 总结

在大数据分析领域中,传统的大数据分析需要不同框架和技术组合才能达到最终的效果,在人力成本,技术能力和硬件成本上以及维护成本让大数据分析变得成为昂贵的事情。让很多中小型企业非常苦恼,不得不被迫租赁第三方大型公司的数据分析服务。

ClickHouse开源的出现让许多想做大数据并且想做大数据分析的很多公司和企业耳目一新。ClickHouse 正是以不依赖Hadoop 生态、安装和维护简单、查询速度快、可以支持SQL等特点在大数据分析领域越走越远。

你可能感兴趣的:(ClickHouse概述)