彪悍开源的分析数据库-ClickHous

彪悍开源的分析数据库-ClickHous

今天介绍一个来自俄罗斯的凶猛彪悍的分析数据库:ClickHouse,它是今年6月开源,俄语社区为主,好酒不怕巷子深。

本文内容较长,分为三个部分:走马观花,死而后生,遥指杏花村;第一章,走马观花,初步了解一下基本特性;第二章,死而后生,介绍ClickHouse的技术架构演化的今生前世;第三章,遥指杏花村,介绍一些参考资料,包括一些俄文资料。

第一章,走马观花

俄罗斯的‘百度’叫做Yandex,覆盖了俄语搜索超过68%的市场,有俄语的地方就有Yandex;有中文的地方,就有百度么?好像不一定:)。

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

简单的说,ClickHouse作为分析型数据库,有三大特点:一是跑分快,二是功能多,三是文艺范

1.跑分快:ClickHouse跑分是Vertica的5倍快:

ClickHouse性能超过了市面上大部分的列式存储数据库,相比传统的数据ClickHouse要快-0X,ClickHouse还是有非常大的优势:

Million数据集:

ClickHouse比Vertica约快5倍,比Hive快倍,比MySQL快倍

1Billion数据集:

ClickHouse比Vertica约快5倍,MySQL和Hive已经无法完成任务了

2.功能多:ClickHouse支持数据统计分析各种场景

-支持类SQL查询,

-支持繁多库函数(例如IP转化,URL分析等,预估计算/HyperLoglog等)

-支持数组(Array)和嵌套数据结构(NestedDataStructure)

-支持数据库异地复制部署

3.文艺范:目前ClickHouse的限制很多,生来就是为小资服务的

-目前只支持Ubuntu系统

-不提供设计和架构文档,设计很神秘的样子,只有开源的C++源码

-不理睬Hadoop生态,走自己的路

谁在用ClickHouse?

由于项目今年6月才开源,因此外部商业应用并不多件,但是开发社区的讨论还是保持热度(主要用俄语)

Yandex有十几个项目在用使用ClickHouse,它们包括:Yandex数据分析,电子邮件,广告数据分析,用户行为分析等等

年,欧洲核子研究中心使用ClickHouse保存粒子对撞机产生的大量实验数据,每年的数据存储量都是PB级别,并支持统计分析查询

ClickHouse最大应用:

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

ClickHouse就是快:比Veritca快约5倍

下面是M数据集的跑分结果:ClickHouse比Vertia快约5倍,比Hive快倍,比MySQL快倍;虽然对不同的SQL查询,结果不完全一样,但是基本趋势是一致的。ClickHouse跑分有多块?举个例子:ClickHouse1秒,Vertica5.42秒,Hive秒;

ClickHouse是什么,适合什么场景?

到底什么是ClickHouse数据库,场景应用是什么,参考下面说明:

ClickHouse的不完美:

不支持Transaction:想快就别想Transaction

聚合结果必须小于一台机器的内存大小:不是大问题

缺少完整的Update/Delete操作

支持有限操作系统

开源社区刚刚启动,主要是俄语为主

ClickHouse和一些技术的比较

1.商业OLAP数据库

例如:HPVertica,ActiantheVector,

区别:ClickHouse是开源而且免费的

2.云解决方案

例如:亚马逊RedShift和谷歌的BigQuery

区别:ClickHouse可以使用自己机器部署,无需为云付费

3.Hadoop生态软件

例如:ClouderaImpala,SparkSQL,FacebookPresto,ApacheDrill

区别:

-ClickHouse支持实时的高并发系统

-ClckHouse不依赖于Hadoop生态软件和基础

-ClickHouse支持分布式机房的部署

4.开源OLAP数据库

例如:InfiniDB,MonetDB,LucidDB

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

5.开源分析,非关系型数据库

例如:Druid,ApacheKylin

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

第二章,死而后生

ClickHouse设计之初就是为Yandex.Metrika而生,先一起看看Yandex.Metrika数据分析系统的演化过程吧,ClickHouse是第四代的解决方案,经过三次死亡后的产物,涅槃重生的巨兽!

第一阶段:MyISAM(LSM-Tree)(8-)

Yandex.Metrika产品成立于8年,最开始使用了MyISAM作为存储引擎。熟悉MySQL的同学都知道,这是MySQL的重要存储引擎之一(另外一个是InnoDB)。MyISAM中的实现也是使用LSM-Tree的设计,基本思路就是将对数据的更改hold在内存中,达到指定的threadhold后将该批更改批量写入到磁盘,在批量写入的过程中跟已经存在的数据做rollingmerge。

使用MyISAM的方法,刚开始数据量不大,访问请求也不大的时候,这个方法非常有效,特别是对于一些固定的报告生成,效率非常高,系统能够保持很好的系统写能力。

数据格式也是传统的索引结构:一个数据文件+一个索引结构;索引结构是一个B-Tree结构,叶子节点保持着数据文件的OffSet;通过Index文件找到数据范围,然后进行数据文件读取;早期的实现是将Index文件装在内存中,数据文件在磁盘当中,或则SSD等。当时7RPM的硬盘,每秒进行-次随机读;SSD硬盘可以支持次随机读/每秒。

除了考察MyISAM之外,InnoDB也被考察过。MyISAM的索引和数据是分开的,并且索引是有压缩的,这种方式可以提高内存的使用率。加载更多索引到内存中,而Innodb是索引和数据是紧密捆绑的,没有使用压缩的情况下,InnoDb的大小会比MyISAM体积大很多。当然,InnoDB支持的Transaction也是非常诱人的。

阶段二:Metrage(从-现在)

为了解决MyISAM的一些问题,Yandex决定开发Metrage,核心想法来源于统计分析数据的一些特点,统计分析数据的每行数据量都不大,因此可以将多行数据聚合在一起作为处理单位,加快操作速度和系统的吞吐能力。

它有几个特点:

数据通过小批量Batch存储

支持高强度的写操作(数千行写入/每秒)

读数据量非常小

读数据操作中PrimaryKey的数量有限(1百万)

每一行的数据量很小

整个结构类似于MyISAM的索引,但是数据块中也聚合了一些小粒度的数据,索引放在内存中,数据被整理成块放在磁盘中,并且进行压缩。

该数据结构的优点:

-数据被压缩成块。由于存储有序,压缩足够强大,其中使用了快速压缩算法(在年使用QuickLZ,自年使用LZ4)。

-采用稀疏索引:稀疏索引-主键值排序后放置于若干个组中,可以节省大量索引空间。这个索引始终放在内存中。

Metrage在数据量最大的时候,39*2台服务器中存储了大约3万亿行数据,每天机器处理大约为1千亿的数据。

这个系统有个缺点,数据查询只能进行基于固定的查询模式(否则性能将受到很大影响),因此在设计数据Schema的时候,需要考虑数据查询的性能问题,缺少足够的灵活型。因此这个项目使用了5年后,统计分析的数据都开始迁移到其他的平台系统中了(那时候LevelDB,还没有出现,否则可以使用LevelDB作为Mertage的核心模块)。

阶段三OLAPServer(9-)

随着Yandex.Metrike的数据量越来越大,数据查询的速度越来越慢,查询相应事件长,系统的CPU和IO资源占用大,因此公司内部尝试了不同的解决方案,其中一个原型方案是OLAPServer。设计思路就是根据“星型结构”设计一些维度和事实列,通过预先部分聚合数据加快访问的速度,这一套技术用于支持各种报告的生成。

基本的场景如下:

支持一个Fact表,包括维度列(Dimension)和指标列(Metrics),维度有上百个

读取大量行的数据,但是一次查询往往只







































白癜风身上复发该要怎么办怎么治疗
儿童白癜风怎样治疗



转载请注明:http://www.xcqg58.com/lsqy/796.html