总结
clickhouse,简称ck, 罗斯人发明的
DBMS,数据库管理系统。
列式存储。
OLAP
在线,分析
不依赖hdfs
追加写入数据,之前的数据不会被删除或者修改。
ClickHouse是一个数据库管理系统(DBMS),但它与传统的关系型数据库管理系统(RDBMS)有显著的不同。
ClickHouse是一个用于在线分析处理(OLAP)的列式数据库管理系统,它特别优化了快速查询和大规模数据分析的性能。
列式存储(真正的列式存储)
是一个真正的列式存储数据库管理系统dbms:database manager system
OLAP: online analysize precessing, 在线分析处理工具
能使用sql语言查询,很友好。
不依赖hdfs,不是hadoop生态系统中的组件,而是采用local attached storage 作为存储。
clickhouse不理睬hadoop,走自己的路。
(Hadoop生态系统是美国的。Hadoop是一个由Apache基金会开发的开源软件项目,而Apache基金会位于美国。)
DDL:data define language
定义:可以创建/修改/删除数据库,数据库表,视图等对象
DML:data manager language
管理表中的数据,删除数据,插入数据,修改数据等操作
clickhouse底层是c++写的。所以很快。
clickhouse不仅仅是一个数据库,更是一个数据库管理系统dbms。因为它支持创建数据库和数据库表。
clickhouse允许在运行的时候创建数据库和数据库表,允许在运行的时候加载数据和查询数据,而不需要重新启动服务器。
数据是以批量的形式追加写入到数据库中的,原来的数据不会被修改。
我们在查询的数据,关于同一个人,我们会选择最新的数据。(这有点类似于hbase的ts时间戳,数据的版本控制)
即使是一个很简单的sql查询,clickhouse也会使用尽可能多的核心来并行处理数据。
1/什么是clickhouse
ClickHouse是俄罗斯的Yandex于2016年开源的一个用于联机分析(OLAP:Online Analytical Processing)的列式数据库管理系统(DBMS:Database Management System),简称CH.
主要用于在线分析处理查询(OLAP),能够使用SQL语言查询实时生成分析数据报告。
ClickHouse是一个完全的`列式`数据库管理系统DBMS,
允许在运行时创建数据库和数据表,加载数据和运行查询,而无需重新配置和重新启动服务器,
支持线性扩展,简单方便,高可靠性,容错。
clickhouse不依托haddoop,不属于hadoop生态系统,数据不是存储在hdfs上的,
不是主从结构,而是多主结构,没有从节点,MPP结构,大家都是平等的
而是采用 Local attached storage 作为存储,这样整个 IO 可能就没有 Hadoop 那一套的局限。
它的系统在生产环境中可以应用到比较大的规模,因为它的线性扩展能力和可靠性保障能够原生支持 shard + replication 这种解决方案。
它还提供了一些 SQL 直接接口,有比较丰富的原生 client。
另外就是它比较快。
需要说明的是,ClickHouse不单单是一个数据库,它是一个数据库管理系统(DBMS)
因为它允许在运行时创建表和数据库、加载数据和运行查询,而无需重新配置或重启服务。
作为一个DBMS,它具备了一些基本功能,如:
<1>DDL ( 数据定义语言 data define language):
可以动态地创建、修改或删除数据库、表和视图,而无须重启服务;
<2>DML ( 数据操作语言 ):
可以动态查询、插入、修改或删除数据;
<3>权限控制:
可以按照用户粒度设置数据库或者表的操作权限,保障数据的安全性;
<4>数据备份与恢复:
提供了数据备份导出与导入恢复机制,满足生产环境的要求;
<5>分布式管理:
提供集群模式,能够自动管理多个数据库节点。
ClickHouse支持基于SQL的声明式查询语言,该语言大部分情况下是与SQL标准兼容的。
支持的查询包括 GROUP BY,ORDER BY,IN,JOIN以及非相关子查询。
不支持窗口函数和相关子查询。
**Expected one of: LIMIT, WHERE, HAVING, INTO OUTFILE, GROUP BY, PREWHERE, Comma, ORDER BY, SETTINGS, UNION ALL, FROM, FORMAT, WITH**
2/clickhouse为什么会快
选择ClickHouse 的首要原因是它比较快,但其实它的技术没有什么新的地方,为什么会快?
<1>它的数据剪枝能力比较强
分区剪枝在执行层,而存储格式用局部数据表示,所以就可以更细粒度地做一些数据的剪枝。
它的引擎在实际使用中应用了一种现在比较流行的 LSM 方式。
<2>它对整个资源的垂直整合能力做得比较好,并发 MPP+ SMP 这种执行方式可以很充分地利用机器的集成资源。它的实现又做了很多性能相关的优化,它的一个简单的汇聚操作有很多不同的版本,会根据不同 Key 的组合方式有不同的实现。对于高级的计算指令,数据解压时,它也有少量使用。
<3>ClickHouse 是一套完全由 C++ 模板 Code 写出来的实现,代码还是比较优雅的。
<4>ClickHouse是一个完全的列式存储数据库
3/clickhouse的优缺点
<1>优点
-
1)灵活的MPP架构,支持线性扩展,简单方便,高可靠性。 MPP架构,及多主节点,没有从节点,所有的节点都是平等的,避免了单节点故障问题。 hadoop是主从架构,即使有备用主节点,也是会出宕机的风险,万一2台主节点都宕机了怎么办。 所以clickhouse的MPP架构,更加灵活。
-
2)多服务器分布式处理数据,完备的DBMS系统,可以动态的进行数据库和表的创建,数据查询,不需要重复地重启服务。
-
3)底层数据列式存储,支持数据压缩,减少IO
-
- 快,比hive快300倍,比mysql快800倍。
-
5)功能多,支持数据统计分析各种场景,支持sql语句。可以海量数据存储。
<2>缺点
- 不支持事务,不支持真正的删除/更新;
- 不支持高并发,官方建议qps为100,可以通过修改配置文件增加连接数,但是在服务器足够好的情况下;
- 不支持真正的删除/更新支持 不支持事务(期待后续版本支持)
- 不支持二级索引
- 不擅长多表之间的join
- 有限的SQL支持(SQL满足日常使用80%以上的语法),不支持窗口功能
- 元数据管理需要人工干预维护
- 尽量做1000条以上批量的写入,避免逐行insert或小批量的insert,update,delete操作,因为ClickHouse底层会不断的做异步的数据合并,会影响查询性能,这个在做实时数据写入的时候要尽量避开;
- ClickHouse快是因为采用了并行处理机制,即使一个查询,也会用服务器一半的CPU去执行,所以ClickHouse不能支持高并发的使用场景,默认单查询使用CPU核数为服务器核数的一半,安装时会自动识别服务器核数,可以通过配置文件修改该参数。
4/在使用clickhouse时候,可能会遇到的问题
<1>问题1:大量查询导致服务器负载高情况,影响业务查询
分析:多个复杂查询,并且命中数据量极大的情况下,每个查询都会占用大量的cpu和内存。
会导致服务器负载被打满的情况。尤其是内存被打满,会造成节点挂掉的现象。
解决:
用户限制,避免内存被打满,可以配置max_memory_usage_for_all_queries,使其低于服务器实际内存。并且还可以限制用户的并发,每次查询的数据量等;
某些业务下无法限制查询数据量,可以添加缓存机制,避免大量大数据查询。
<2>问题2: ddl语句卡死
分析:Clickhouse主要支持的是追加及查询,
但是使用mergetree作为存储引擎的表,是可以做update和delete的。
更新和删除操作是用alter table语句的,也就是说其实这是需要ddl的权限的。
每一次这种操作,数据库都会发生加锁,更新表等操作,并且数据量大的情况下,做更新操作,整个数据都会根据索引情况重新排序,这是一个漫长的过程。
Clickhouse的ddl语句底层应该是个队列,一个没执行完,也会导致其他ddl卡住。
解决:尽量减少ddl语句的执行频率以及增加执行间隔,或者尽量不要执行。
<3>问题3:zookeeper失联
分析:Clickhouse集群方案很依赖zk,副本同步机制都是依赖zk的,导致每次插入数据都会和zk做交互,并且在zk中做写操作,插入并发高的情况下,可能会导致zk暂时失联。
解决:之前zookeeper是和Clickhouse混部,后期做了拆分,情况有一部分好转。
但是目前依然会偶尔出现问题,后续会继续对这块优化,zookeeper的服务器性能也会去尽量完善
申请高配服务器,提高zookeeper的性能,使得不会因为zookeeper性能而影响到Clickhouse。
5/应用场景
绝大多数请求都是用于读访问的
数据需要以大批次(大于1000行)进行更新,而不是单行进行更新,或者根本没有更新操作。
数据只是添加到数据库,没有必要修改。
读取数据时,会从数据库提取大量的行,但是只会用到一小部分列。
表很‘宽’,及表中包含大量的列。
查询频率相对较低,通常每台服务器每秒查询数百次或更少。
对于简单查询,允许大约50毫秒的延迟。
列的值是比较小的数值和短的字符串(例如:每个url只有60个字节)
在处理单个查询时需要高吞吐量
不需要事物
数据一致性要求较低
每次查询只会查询一张大表。除了一张大表,其余都是小表。
查询结果显著小于数据源。即数据有过滤或者集合。返回结果不超过单个服务器内存的大小。
6/clickhouse的特性
真正的列式存储数据库管理系统。
数据压缩
多核心并行处理:clickouse会使用集群中一切可用的资源
7/clickhouse的文件目录
在大部分的DBMS数据库管理系统中,数据库本质上都是由各种子目录和一系列的文件目录,clickhouse也不例外。
clickhouse的数据目录默认是在/var/lib/clickhouse/data目录下的。
所有的数据库都会在data目录下创建一个子目录(文件夹)。
下图展示了clickhouse的数据目录的组织情况
每一个数据库都会在 clickhouse 的 data 目录中创建一个子目录,clickhouse 默认携带 default 和 system 两个数据库。
default 顾名思义就是默认数据库,system 是存储 clickhouse 服务器相关信息的数据库,例如连接数、资源占用等。
上图展示了 clickhouse 通过操作后,导入的数据库的文件形式。可以看到,在 tutorial 文件夹中,建立了两个子目录,每个子目录为即为一张数据表。进入 hits_v1 目录后又能看到两个子目录和一个文本文件。
clickhouse是用来干啥的?为什么要用clickhouse
ClickHouse是一个【开源】的【列式】数据库管理系统,主要用于在线分析处理查询(OLAP)场景。它以其高性能、高可靠性、高可扩展性和低成本等特点,在大数据领域得到了广泛应用。
ClickHouse的主要用途
- 大数据分析和处理:ClickHouse能够快速地处理数十亿、数百亿级别的数据,支持高并发查询和数据聚合,是大数据分析和处理的理想选择。
- 实时分析和报表:ClickHouse可以在毫秒级别内对海量数据进行实时查询和分析,能够快速生成实时报表和分析结果。
- 日志分析:ClickHouse可以高效地存储和分析大量的日志数据,能够快速查找和过滤数据,提高日志分析效率。
- 时间序列数据存储和查询:ClickHouse支持时间序列数据的存储和查询,适用于物联网、金融、电信等行业的实时数据分析和处理。
为什么要用ClickHouse
- 高性能:ClickHouse采用列式存储方式,能够快速处理大量数据,并且支持高并发查询。相比传统的行式数据库或Hadoop生态,ClickHouse在性能上有几倍甚至几百倍的优势。
- 高可靠性和高可扩展性:ClickHouse支持分布式部署和水平扩展,能够满足大规模数据处理和存储的需求。同时,它还具有强大的数据保护机制,如数据备份、恢复和复制等,保证数据的安全性和可靠性。
- 易用性:ClickHouse支持SQL语言,提供了传统关系型数据库的便利,同时也支持一些高级功能,如聚合函数、窗口函数、数组操作、字典操作等。这使得用户在使用ClickHouse时能够更容易上手和进行复杂的查询操作。
- 低成本:ClickHouse是一个开源的数据库管理系统,没有商业版权费用,能够降低企业的运营成本。
- 支持实时数据处理:ClickHouse支持实时数据处理,能够在秒级别内返回查询结果,适用于需要快速响应的实时数据处理场景。
综上所述,ClickHouse以其高性能、高可靠性、高可扩展性、易用性和低成本等特点,在大数据分析和处理、实时分析和报表、日志分析以及时间序列数据存储和查询等领域具有广泛的应用前景。对于需要进行大规模数据分析、实时数据处理和降低运营成本的场景,选择ClickHouse是一个明智的选择。
clickhouse和hbase的区别和联系
ClickHouse和HBase是两种不同的数据库系统,它们各自具有独特的特点和适用场景。
以下是它们之间的区别和联系:
<1>区别
-
数据模型与存储方式
- ClickHouse:采用列式存储模型,数据按照列而不是行进行组织。这种存储方式优化了数据读取和分析的效率,特别适合于大数据量的实时分析查询场景。
- HBase:是一个分布式、面向列的NoSQL数据库,数据被组织为行、列族、列和单元格的层次结构,并存储在表中。HBase的存储方式主要是基于Hadoop的HDFS(Hadoop Distributed File System)平台,提供高可靠性和可扩展性。
-
适用场景
- ClickHouse:主要用于在线分析处理(OLAP)场景,能够处理大规模的数据分析任务,提供高性能的分布式查询引擎。它特别适合于需要快速响应和实时分析的场景。
- HBase:适合于实时读写大规模数据,尤其擅长快速随机访问。它通常用于需要高可用性和扩展性的场景,如大数据存储、实时数据处理等。
-
查询与事务支持
- ClickHouse:提供SQL查询语言支持,方便进行数据分析和报表等操作。然而,它不支持事务处理和无服务器模式。
- HBase:支持实时更新和插入,但可能不是最佳选择对于批量的数据加载或复杂的数据转换操作。HBase是典型的最终一致性数据库,适用于需要高可用性和扩展性的场景。
-
架构与扩展性
- ClickHouse:具有灵活的MPP架构,支持线性扩展,简单方便,高可用性。多服务器分布式处理数据,完备的DBMS系统。
- HBase:使用Zookeeper来存储元数据,并且每个集群都需要一个领导者节点。HBase的存储引擎可以自定义,但它默认使用的是SSTable。
-
性能特点
- ClickHouse:虽然提供了高性能的分布式查询引擎,但在某些情况下可能会因为数据分布不均而影响性能。它通常用于处理大规模数据集,并能在毫秒级别内返回查询结果。
- HBase:由于其设计用于快速随机访问,通常具有较好的读写性能。它特别适合于需要快速访问大量数据的场景。
<2>联系
尽管ClickHouse和HBase在数据模型、存储方式、适用场景等方面存在显著差异,但它们都是大数据处理领域的重要工具,各自在特定场景下发挥着重要作用。在某些应用场景中,可能会将HBase和ClickHouse结合使用,以实现更全面的数据处理和分析能力。例如,可以将HBase用于实时数据存储和初步处理,然后将处理后的数据传输到ClickHouse中进行进一步的分析和查询。
综上所述,ClickHouse和HBase各有优势,选择哪一种取决于具体的应用需求。在实际应用中,可以根据数据的特点、处理需求以及系统架构等因素来综合考虑选择哪种数据库系统。
什么场景下用clickhouse?什么场景下用hbase?
在选择使用ClickHouse还是HBase时,主要依据是具体的应用场景、数据特性以及性能需求。
以下是两种数据库适用场景的具体分析:
<1>ClickHouse适用场景
ClickHouse是一个开源的列式数据库管理系统(DBMS, database manager system)
专注于OLAP(在线分析处理)场景,特别适用于需要处理大规模数据并进行实时或高速查询的场景。其主要适用场景包括:
- 实时分析:ClickHouse能够快速处理大规模数据,支持实时查询和分析,适用于实时监控、实时报表等需要即时结果的场景。
- 数据仓库:ClickHouse可以作为数据仓库,用于存储和分析大规模数据,支持复杂的分析查询,适用于大数据分析、数据挖掘等场景。
- 日志分析:ClickHouse支持高速的数据插入和查询,适用于处理大量日志数据的场景,如日志分析、监控日志等。
- 时序数据处理:ClickHouse支持时序数据的存储和查询,适用于处理时间序列数据的场景,如监控数据、传感器数据等。
- 广告点击分析:ClickHouse能够快速准确地分析大规模的广告点击数据,支持广告效果分析、用户行为分析等场景。
<2>HBase适用场景
HBase是一个开源的分布式数据库,基于Hadoop的HDFS进行存储,适用于高并发、大数据量的场景。其主要适用场景包括:
- 实时读写:HBase主要用于实时读写,适合需要快速随机访问数据的应用场景,如实时推荐系统、监控系统等。
- 时序数据存储:HBase的存储结构非常适合时序数据的存储和查询,如监控数据、日志数据等。用户可以按照时间范围快速检索和获取数据。
- 互联网应用:HBase被广泛用于构建大规模互联网应用,如社交网络、电子商务平台等。通过HBase的强大的水平扩展性和高可用性,用户可以存储和访问数以亿计的用户数据,并实现实时的数据查询和更新。
- 高并发和高可靠性:HBase适用于需要高可扩展性和高可靠性的应用,可以方便地扩展集群规模,支持高并发和高可用性。
- 分布式缓存:HBase可以作为分布式缓存系统使用,提供快速的键值查询和持久化存储。用户可以将经常访问的数据存储到HBase中,以减少对后端数据库的访问,提高系统的响应速度。
<3>总结
在选择ClickHouse还是HBase时,需要根据具体的应用场景和数据特性来决定。
如果应用场景侧重于实时分析、数据仓库、日志分析、时序数据处理或广告点击分析等大规模数据查询和分析的场景,那么ClickHouse是更好的选择。
而如果应用场景需要处理海量数据的实时读写、高并发和高可靠性,或者作为分布式缓存系统使用,那么HBase则更为合适。