ClickHouse教程 — 第二章 ClickHouse快速入门

ClickHouse教程 — 第二章 ClickHouse快速入门

  • 1 ClickHouse简介
  • 2 ClickHouse特点
  • 3 clickhouse缺点
  • 4 clickhouse为什么快
  • 5 ClickHouse引擎
    • 5.1 数据库引擎
    • 5.2 数据表引擎
      • 5.2.1 表引擎类型
    • 5.3 数据类型
  • 6 ClickHouse使用语法
  • 7 代码操作ClickHouse
    • 7.1 go.mod
    • 7.2 测试是否连通clickhouse

1 ClickHouse简介

参考1:大数据技术之 ClickHouse
参考2:ClickHouse官方介绍
参考3:ClickHouse介绍
参考4:篇一|ClickHouse快速入门

推荐阅读参考1、2,优先阅读参考1

ClickHouse俄罗斯Yandex 于 2016 年开源的用于联机分析(OLAP :Online Analytical Processing列式数据库管理系统(DBMS:Database Management System),能够使用 SQL 查询实时生成分析数据报告,主要用于Web流量分析。ClickHouse的全称是Click Stream,Data WareHouse

ClickHouse非常适用于商业智能领域,除此之外,它也能够被广泛应用于广告流量、WebApp流量、电信、金融、电子商务、信息安全、网络游戏、物联网等众多其他领域。

2 ClickHouse特点

列式存储
行式存储的好处:
想查找某个人所有的属性时,可以通过一次磁盘查找加顺序读取就可以;但是当想查所有人的年龄时,需要不停的查找,或者全表扫描才行,遍历的很多数据都是不需要的。

列式存储的好处

  • 对于列的聚合、计数、求和等统计操作优于行式存储
  • 由于某一列的数据类型都是相同的,针对于数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,大大提高了数据的压缩比重。
  • 数据压缩比更好,一方面节省了磁盘空间,另一方面对于cache也有了更大的发挥空间
  • 列式存储不支持事务

DBMS功能
几乎覆盖了标准 SQL 的大部分语法,包括 DDL 和 DML、,以及配套的各种函数;用户管理及权限管理、数据的备份与恢复。

多样化引擎
目前包括合并树、日志、接口和其他四大类20多种引擎。

高吞吐写入能力
ClickHouse采用类LSM Tree的结构,数据写入后定期在后台Compaction。通过类 LSM tree的结构, ClickHouse数据导入时全部是顺序append,写入后数据段不可更改,在后台compaction时也是多个段merge sort后顺序写回磁盘。顺序写的特性,充分利用了磁盘的吞吐能力。

数据分区与线程及并行

ClickHouse将数据划分为多个partition,每个partition再进一步划分为多个index granularity(索引粒度),然后通过多个CPU核心分别处理其中的一部分来实现并行数据处理。在这种设计下, 单条 Query 就能利用整机所有 CPU。 极致的并行处理能力,极大的降低了查询延时。

所以, ClickHouse 即使对于大量数据的查询也能够化整为零平行处理。但是有一个弊端就是对于单条查询使用多cpu,就不利于同时并发多条查询。所以对于高 qps 的查询业务并不是强项。

ClickHouse 像很多 OLAP 数据库一样,单表查询速度优于关联查询,而且 ClickHouse的两者差距更为明显。

关联查询:clickhouse会将右表加载到内存。

3 clickhouse缺点

  1. 列式存储不支持事务。
  2. 不擅长根据主键按行粒度进行查询(虽然支持),故不应该把ClickHouse当作Key-Value数据库使用。
  3. 不擅长按行删除数据(虽然支持)。

4 clickhouse为什么快

  1. C++可以利用硬件优势。
  2. 摒弃了hadoop生态。
  3. 数据底层以列式存储。
  4. 利用单节点的多核并行处理。
  5. 为数据建立索引一级、二级、稀疏索引。
  6. 使用大量的算法处理数据。
  7. 支持向量化处理。
  8. 预先设计运算模型-预先计算。
  9. 分布式处理数据。

5 ClickHouse引擎

ClickHouse引擎分为 数据库引擎数据表引擎
参考1:ClickHouse表引擎之Log系列表引擎
引擎这块还需要深入了解一下,有些引擎不支持删改操作。

5.1 数据库引擎

数据库引擎,默认情况下,ClickHouse使用Atomic数据库引擎。它提供了可配置的table enginesSQL dialect

  1. MySQL
    MySQL引擎用于将远程的MySQL服务器中的表映射到ClickHouse中,并允许您对表进行INSERTSELECT查询,以方便您在ClickHouseMySQL之间进行数据交换。

    MySQL数据库引擎会将对其的查询转换为MySQL语法并发送到MySQL服务器中,因此您可以执行诸如SHOW TABLESSHOW CREATE TABLE之类的操作。

  2. MaterializeMySQL
    MySQL数据同步;将MySQL数据全量或增量方式同步到clickhouse中,解决mysql服务并发访问压力过大的问题。

  3. Lazy
    在最后一次访问之后,只在RAM中保存expiration_time_in_seconds秒。只能用于Log表。
    它是为存储许多小的Log表而优化的,对于这些表,访问之间有很长的时间间隔。也就是访问不频繁,压缩率高。

  4. Atomic
    默认的数据库引擎。它提供了可配置的table enginesSQL dialect

  5. PostgreSQL

  6. MaterializedPostgreSQL

  7. Replicated

  8. SQLite

5.2 数据表引擎

表引擎是 ClickHouse 的一大特色。可以说, 表引擎决定了如何存储表的数据。包括:

  1. 数据的存储方式和位置,写到哪里以及从哪里读取数据。
  2. 支持哪些查询以及如何支持。
  3. 并发数据访问。
  4. 索引的使用(如果存在)。
  5. 是否可以执行多线性请求。
  6. 数据复制参数。

5.2.1 表引擎类型

参考1:表引擎
表引擎大致可分四个种类。

  1. 合并树家族
    适用于高负载任务的最通用和功能最强大的表引擎。这些引擎的共同特点是可以快速插入数据并进行后续的后台数据处理。 MergeTree系列引擎支持数据复制(使用Replicated* 的引擎版本),分区和一些其他引擎不支持的其他功能。

    该类型的引擎
    MergeTree最常用

    ReplacingMergeTree最常用

    SummingMergeTree

    AggregatingMergeTree

    CollapsingMergeTree

    VersionedCollapsingMergeTree

    GraphiteMergeTree

  2. 日志引擎系列
    具有最小功能的轻量级引擎。当您需要快速写入许多小表(最多约100万行)并在以后整体读取它们时,该类型的引擎是最有效的。

    该类型的引擎:
    TinyLog

    StripeLog

    Log

  3. 集成的表引擎
    用于与其他的数据存储与处理系统集成的引擎。

    该类型的引擎:
    Kafka比较常用,采集回来的数据先存Kafka然后同步到clickhouse

    MySQL比较常用。

    ODBC

    JDBC

    HDFS

  4. 特别
    该类型的引擎:
    Distributed

    MaterializedView

    Dictionary

    Merge

    File

    Null

    Set

    Join

    URL

    View

    Memory

    Buffer

5.3 数据类型

ClickHouse教程 — 第二章 ClickHouse快速入门_第1张图片

6 ClickHouse使用语法

ClickHouse的语法与MySQL语法比较接近。在此就不做过多介绍了,可参考:SQL参考

7 代码操作ClickHouse

7.1 go.mod

注意clickhouse-go/v2 版本的问题,使用 github.com/ClickHouse/clickhouse-go/v2 v2.4.1 会报:

WARNING: version 21.3.19 of ClickHouse is not supported by this client
ClickHouse (clickhouse-standalone) server version 21.3.19 revision 54447 (timezone Asia/Shanghai)

降级改为 github.com/ClickHouse/clickhouse-go/v2 v2.2.0 即可。

module clickhouse_demo

go 1.19

require github.com/ClickHouse/clickhouse-go/v2 v2.2.0

7.2 测试是否连通clickhouse

代码:

package main

import (
	"fmt"
	"github.com/ClickHouse/clickhouse-go/v2"
)

func main() {
	conn, _ := clickhouse.Open(&clickhouse.Options{Addr: []string{"192.168.13.10:9000"}})
	v, _ := conn.ServerVersion()
	fmt.Println(v.String())
}

结果:

API server listening at: 127.0.0.1:51175
ClickHouse (clickhouse-standalone) server version 22.2.2 revision 54455 (timezone Asia/Shanghai)

连通正常。

你可能感兴趣的:(clickhouse,clickhouse)