clickhouse简单使用及优化

clickhouse简单使用及优化

  • 一、ClickHouse是什么?
  • 二、特点
  • 三、使用步骤
    • 1.安装看官网
    • 2.数据类型
    • 3.命令行client操作
    • 4.用户密码设置
    • 5.表引擎
    • 6.创建表
      • 6.1创建普通表
      • 6.2创建分布式表
  • 三、同步mysql数据
  • 优化策略

原来项目用mysql,随着数据量增加已不再适用(目前每周大约2亿数据),且这部分数据主要用于分析,不涉及更改,调研后迁移到clickhouse。
目前用了 22.3.3.44 版本。

一、ClickHouse是什么?

ClickHouse® 是一种用于在线分析处理 (OLAP) 的高性能、面向列的 SQL 数据库管理系统 (DBMS)。它既可以作为开源软件使用,也可以作为云产品使用。。

二、特点

  • 列式存储,OLAP(On-line Transaction Processing)数据库
  • 具备DBMS功能
  • 适用于只插入数据不更改或者少量更改数据的场景(clickhouse更改数据是很重的操作)
  • 并发低,qps默认为100
  • 查询速度快,多线程查询(单条sql即可多线程查询)
  • 稀疏索引

三、使用步骤

1.安装看官网

clickhouse官方文档

2.数据类型

看官网,他的文档感觉写的很好~
![在这里插入图片描述](https://img-blog.csdnimg.cn/947e8b39b2c84bda849604314e9a08cc.png在这里插入图片描述

3.命令行client操作

# 登录,如果没有密码就空着
clickhouse-client --user default --password root 
# 执行sql脚本
clickhouse-client --user default --password root  --multiquery <  /home/data/test_log.sql

4.用户密码设置

/etc/clickhouse-server/users.xml 文件中的users标签为用户,其中default代表用户名,这里我只用了default用户,可以添加其他用户

 <users><default>  <password_sha256_hex>4813494d137e1631bba301d5acab6e7bb7aa74ce1185d456565ef51d737677b2password_sha256_hex><networks><ip>::/0ip>networks><profile>defaultprofile><quota>defaultquota>default>users>

5.表引擎

clickhouse有多种表引擎,其中用的最多的为合并树,是clickhouse中最强大的表引擎,它是一个家族,其中有多种细分类别。
该系列中的引擎MergeTree设计用于将大量数据插入表中。数据快速逐个写入表,然后应用规则在后台合并各个部分。这种方式比insert时不断改写storage中的数据效率高很多。
在这里插入图片描述

6.创建表

6.1创建普通表

我主要用了MergeTree,以它为例:

CREATE table test_log(id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(create_time)
PRIMARY KEY id
ORDER BY id
  • ENGINE- 引擎名
  • ORDER BY — 排序键
  • PARTITION BY — 分区键 ,可选项。
  • PRIMARY KEY - 如果要 选择与排序键不同的主键,在这里指定,可选项。

6.2创建分布式表

单机难以接入这么多流量,目前这个项目可以指定每台设备接入哪些流量,所以只需要增加一个分布式表用于查询所有设备数据即可,不需要通过分布式表写入。

1.更改配置文件 config.xml 在<remote_servers></remote_servers>标签之间添加集群信息,重启clickhouse,集群信息例(我设置了免密登录,需要密码还要写密码,看官网):<!-- 测试集群 -->
<test_cluster><!-- 分片1 --><shard><replica><host>192.168.10.183</host><port>9000</port></replica></shard><!-- 分片2 --><shard><replica><host>192.168.10.184</host><port>9000</port></replica></shard>
</test_cluster>2.创建分布式表指定集群与服务器中的本地库名、表名,例:CREATE TABLE d_test_log (id UInt32,create_time Datetime
) ENGINE = Distributed(test_cluster, default, test_log);3.查询分布式表
select * from d_test_log limit 10;

三、同步mysql数据

CREATE TABLE log_mt ENGINE = MergeTree ORDER BY Id AS SELECT * FROM mysql('127.0.0.1:3306', 'test', 'test_log', 'root', 'root');

优化策略

  1. 查询时指定select的字段,只获取需要的,这样io少
  2. 批量插入,官方建议>1000
  3. 不要使用join,clickhouse的join会将右表完全加载到内存,建议将一类型业务放到一张宽表中,如果确实合不到一起可以拆表,然后进行2次查询,或者使用去重的表引擎等。
  4. 查询时尽量要指定时间,用PARTITION BY的字段
  5. 使用物化视图(一张表不要建立太多的物化视图,插入时会关联插入这些物化视图的数据)
  6. MergeTree设置冷热数据,将热数据放到固态盘中(冷热数据看官网的MergeTree引擎说明)
  7. 字段添加索引


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部