一 . 序章 随着数据科技的进步,数据分析师早已不再满足于传统的T+1式报表或需要提前设置好维度与指标的OLAP查询。 数据分析师更希望使用可以支持任意指标、任意维度并秒级给出反馈的大数据Ad-hoc查询系统。 对大数据技术来说是一项非常大的挑战,传统的大数据查询引擎根本无法做到。 Ad-hoc查询:即席查询(Ad Hoc)是用户根据自己的需求,灵活的选择查询条件,系统能够根据用户的选择生成相应的统计报表。即席查询与普通应用查询最大的不同是普通的应用查询是定制开发的,而即席查询是由用户自定义查询条件的。 二. OLTP和OLAP有何区别?如果有不清楚OLTP和OLAP区别的同学,可以看下我前面所讲 : 三. 什么是ClickHouse?ClickHouse是俄罗斯的Yandex于2016年开源的一个用于联机分析(OLAP:Online Analytical Processing)的列式数据库管理系统(DBMSatabase Management System),简称CK , 使用C++ 语言编写, 主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。 ClickHouse是一个完全的列式数据库管理系统,允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服务器,支持线性扩展,简单方便,高可靠性,容错。它在大数据领域没有走 Hadoop 生态,而是采用 Local attached storage 作为存储,这样整个 IO 可能就没有 Hadoop 那一套的局限。它的系统在生产环境中可以应用到比较大的规模,因为它的线性扩展能力和可靠性保障能够原生支持 shard + replication 这种解决方案。它还提供了一些 SQL 直接接口,有比较丰富的原生 client。另外就是它比较快。 四. clickhouse特点1. 真正的列式数据库管理系统行式存储的好处: 想查找某个人所有的属性时,可以通过一次磁盘查找加顺序读取就可以;但是当想查所有人的年龄时,需要不停的查找,或者全表扫描才行,遍历的很多数据都是不需要的。 列式存储的好处 : - 对于列的聚合、计数、求和等统计操作优于行式存储
- 由于某一列的数据类型都是相同的,针对于数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,大大提高了数据的压缩比重
- 数据压缩比更好,一方面节省了磁盘空间,另一方面对于cache也有了更大的发挥空间
- 列式存储不支持事务
2. 数据压缩在一些列式数据库管理系统中(例如:InfiniDB CE 和 MonetDB) 并没有使用数据压缩。但是, 若想达到比较优异的性能,数据压缩确实起到了至关重要的作用。 除了在磁盘空间和CPU消耗之间进行不同权衡的高效通用压缩编解码器之外,ClickHouse还提供针对特定类型数据的专用编解码器,这使得ClickHouse能够与更小的数据库(如时间序列数据库)竞争并超越它们。 3. 数据的磁盘存储许多的列式数据库(如 SAP HANA, Google PowerDrill)只能在内存中工作,这种方式会造成比实际更多的设备预算。 ClickHouse被设计用于工作在传统磁盘上的系统,它提供每GB更低的存储成本,但如果可以使用SSD和内存,它也会合理的利用这些资源。 4. 多核心并行处理多核心并行处理,clickhouse会使用服务器上一切可用的资源, 单条 Query 就能利用整机所有 CPU。 极致的并行处理能力,极大的降低了查询延时。 ClickHouse 即使对于大量数据的查询也能够化整为零平行处理。但是有一个弊端就是对于单条查询使用多cpu,就不利于同时并发多条查询。所以对于高 qps 的查询业务并不是强项。 5. 多服务器分布式处理在ClickHouse中,数据可以保存在不同的shard上,每一个shard都由一组用于容错的replica组成,查询可以并行地在所有shard上进行处理。这些对用户来说是透明的 6. 支持SQL7. 向量化执行- 在支持列存的基础上,ClickHouse 实现了一套向量化处理的计算引擎,大量的处理操作都是向量化执行的。
- 向量化的代码可以充分利用 CPU 的缓存
- 向量执行引擎,通常能够带来数倍的性能提升
8. 实时的数据更新ClickHouse支持在表中定义主键。为了使查询能够快速在主键中进行范围查找,数据总是以增量的方式有序的存储在MergeTree中。因此,数据可以持续不断地高效的写入到表中,并且写入的过程中不会存在任何加锁的行为。 9. 索引按照主键对数据进行排序,这将帮助ClickHouse在几十毫秒以内完成对数据特定值或范围的查找。 10. 适合在线查询在线查询意味着在没有对数据做任何预处理的情况下以极低的延迟处理查询并将结果加载到用户的页面中。 11. 支持近似计算ClickHouse提供各种各样在允许牺牲数据精度的情况下对查询进行加速的方法: - 用于近似计算的各类聚合函数,如:distinct values, medians, quantiles
- 基于数据的部分样本进行近似查询。这时,仅会从磁盘检索少部分比例的数据。
- 不使用全部的聚合条件,通过随机选择有限个数据聚合条件进行聚合。这在数据聚合条件满足某些分布条件下,在提供相当准确的聚合结果的同时降低了计算资源的使用。
12. 支持数据复制和数据完整性ClickHouse使用异步的多主复制技术。当数据被写入任何一个可用副本后,系统会在后台将数据分发给其他副本,以保证系统在不同副本上保持相同的数据。在大多数情况下ClickHouse能在故障后自动恢复,在一些少数的复杂情况下需要手动恢复。 13. 角色的访问控制ClickHouse使用SQL查询实现用户帐户管理,并允许角色的访问控制,类似于ANSI SQL标准和流行的关系数据库管理系统。 14. 限制- 没有完整的事务支持。
- 缺少高频率,低延迟的修改或删除已存在数据的能力。仅能用于批量删除或修改数据,但这符合 GDPR。
- 稀疏索引使得ClickHouse不适合通过其键检索单行的点查询。
五. ClickHouse性能- 低延迟:对于数据量(几千行,列不是很多)不是很大的短查询,如果数据已经被载入缓存,且使用主码,延迟在50MS左右。
- 并发量:虽然 ClickHouse 是一种在线分析型数据库,也可支持一定的并发。当单个查询比较短时,官方建议 100 Queries / second
- 写入速度:在使用 MergeTree 引擎的情况下,写入速度大概是 50 - 200 M / s,如果按照 1 K 一条记录来算,大约每秒可写入 50000 ~ 200000 条记录每秒。如果每条记录比较小的话写入速度会更快
六. clickhouse为什么快?- C++可以利用硬件优势
- 摒弃了hadoop生态
- 数据底层以列式存储
- 利用单节点的多核并行处理
- 为数据建立索引一级、二级、稀疏索引
- 使用大量的算法处理数据
- 支持向量化处理
- 预先设计运算模型-预先计算
- 分布式处理数据
七. 引擎1. 数据库引擎数据库引擎允许您处理数据表。 您还可以使用以下数据库引擎: 2. 表引擎表引擎(即表的类型)决定了: - 数据的存储方式和位置,写到哪里以及从哪里读取数据
- 支持哪些查询以及如何支持。
- 并发数据访问。
- 索引的使用(如果存在)。
- 是否可以执行多线程请求。
- 数据复制参数。
|