clickhouse 批量插入数据_ClickHouse 了解

ClickHouse是一个开源列式数据库管理系统,专为OLAP设计,提供高速查询性能。支持多种存储引擎,如MergeTree适合大数据分析,支持列式存储、压缩和SQL查询。其特点是读写速度快,适合大量数据的批处理。安装简单,可通过HTTP接口执行SQL。尽管不支持事务,但对于监控、日志分析等场景表现出色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

52caa00816d7cd1afc88b313b860eead.png

ClickHouse是一个用于联机分析处理(OLAP)的开源列式数据库管理系统(columnar DBMS)。

它通过针对性的设计力图解决海量多维度数据的查询性能问题。

开发语言: C++

ClickHouse的特点

开源的列存储数据库管理系统,支持线性扩展,简单方便,高可靠性,容错

跑分快:比Vertica快5倍,比Hive快279倍,比MySQL快800倍

功能多:支持数据统计分析各种场景,支持类SQL查询,异地复制部署

安装:

yum-config-manager --add-repo http://repo.red-soft.biz/repos/clickhouse/repo/clickhouse-el6.repo

yum install clickhouse-server clickhouse-client clickhouse-server-common clickhouse-compressor

useradd clickhouse

/etc/init.d/clickhouse-server start

使用官方的客户端工具clickhouse-client

CREATE DATABASE testdb

CREATE TABLE arrays_test (s String, arr Array(UInt8)) ENGINE = Memory;

INSERT INTO arrays_test VALUES ('Hello', [1,2]), ('World', [3,4,5]), ('Goodbye', [])

它有实现一个 HTTP 的访问接口,把 SQL 语句通过 HTTP 发送到服务端,就可以得到响应数据了。

ClickHouse 中有两种类型的解析器, full parser 和 data format parser ,前者是一个完整的 SQL 解析器,后者是一个高性能的流解析器。

引擎:

TinyLog,每一列保存为一个文件,里面的内容是压缩过的,不支持索引。不支持并发读写,官方推荐,使用这种引擎的表最多 100 万行的数据。

Log,同 TinyLog 差不多,它适用的场景也是那种写一次之后,后面就是只读的场景,临时数据用它保存也可以。

Memory,内存引擎,数据以未压缩的原始形式直接保存在内存当中,服务器重启数据就会消失。可以并行读,读写互斥锁的时间也非常短。

Merge,一个工具引擎,本身不保存数据,只用于把指定库中的指定多个表链在一起。

例:先建了 t1 , t2 , t3 ,三个表,然后用 Merge 引擎的 t 表再把它们链接起来。查询的时候,就能同时取到三个表的数据了。

Distributed, 具备跨服务器能力,与 Merge 类似, Distributed 也是通过一个逻辑表,去访问各个物理表.

Null,空引擎,写入的任何数据都会被忽略,读取的结果一定是空。

Buffer,像Memory存储的一个上层应用似的,是一个缓冲区,写入的数据先被放在缓冲区,达到一个阈值后,这些数据会自动被写到指定的另一个表中Set,这个引擎有点特殊,因为它只用在 IN 操作符右侧,你不能对它 select 。

MergeTree,它支持一个日期和一组主键的两层式索引,还可以实时更新数据。同时,索引的粒度可以自定义,外加直接支持采样功能。

ReplacingMergeTree,这个引擎是在 MergeTree 的基础上,添加了“处理重复数据”的功能,“实时数据”场景量身打造的一个引擎啊。

SummingMergeTree,在 merge 阶段把数据加起来了,当然,哪些列要加可以配置,不可加的列,会取一个最先出现的值。

AggregatingMergeTree 是在 MergeTree 基础之上,针对聚合函数结果,作增量计算优化的一个设计.

CollapsingMergeTree,是专门为 OLAP 场景下,一种“变通”存数做法而设计的.“以加代删”的增量存储方式,带来了聚合计算方便的好处.

如下几种应用场景:

- 绝大多数请求是以读为主。

- 数据以相当大的批次(>1000行)进行更新,而不是单行更新;或者根本不更新。

- 数据被添加到数据库,基本不怎么修改。

- 对于读取,大量的数据从数据库中抽取出来,但只有列的一个子集。

- 表是“宽的”,这意味着它们包含大量的列。

- 查询相对较少(通常每台服务器数百个查询或更少)。

- 对于简单的查询,允许大约50 ms的延迟。

- 列值相当小 - 数字和短字符串(例如,每个URL 60个字节)。

- 处理单个查询时需要高吞吐量(每台服务器每秒高达数十亿行)。

- 无事务处理。

- 数据一致性要求低- 每个查询有一个大表,其他所有的表都是小表。

- 查询结果显著小于源数据。也就是说,数据被过滤或聚合。结果可以放在单个服务器的内存中。

其中一个典型的应用,监控的时序数据.

优点:

1.并行处理单个查询(利用多核)

2.在多个服务器上分布式处理

3.非常快的扫描,可用于实时查询

4.列存储非常适用于“宽”/“非规格化”表(多列)

5.良好的压缩特性

6.SQL支持(有限的支持)

7.一系列函数的支持,包括对近似计算的支持

8.不同的存储引擎的支持(磁盘存储格式)

9.非常适合结构性日志/事件数据以及时间序列数据(引擎的合并树需要日期字段)

10. 索引支持(仅主键支持,不是所有的存储引擎都支持)

11.漂亮的命令行界面,用户友好的进度条和格式

缺点:

1.不支持事物

2.聚合结果必须小于一台机器的内存大小

3.缺少完整的update/delete操作

4.不适合典型的kv存储,高请求率的键值访问

5.不支持Blob/Document类型数据

ClickHouse最大的特点就是快,快,快,重要的话说三遍:

1.优秀的代码编写,强⼤的底层优化,严格的单元测试,内置300多个函数

2.A vector engine & Code generation

3.CPU底层指令集的使用

4.C++新特性

CK出众的原因也跟其引擎有关,合并树(MergeTree)系列的引擎通过主键进行字典序排列. 主键可以是列或表达式的任意 tuple。数据按照主键顺序存储数据,主键自身是稀疏的,它不定位到每一行,而是一些数据范围,当我们从MergeTree引擎中读取数据时,首先定位了可能包含请求数据的范围,要注意的合并树不是一个LSM树,因为它不包含内存表 和日志,插入的数据直接写入到文件系统,在生产环境中,写入的话主要以批量插入数据为主。在查询过程中,数据通过数组来处理(向量或者列Chunk),查询时,操作被转发到数组上,而不是在特定的值上。因此被称为”向量化查询执行”,相对于实际的数据处理成本,向量化处理具有更低的转发成本。

更多内容请关注每日编程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值