clickhouse学习笔记(一)日志引擎

简介

ClickHouse是一个用于联机分析(OLAP:Online Analytical Processing)的列式数据库管理系统(DBMS:Database Management System),简称CH , 主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。

ClickHouse是一个完全的列式数据库管理系统,允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服务器,支持线性扩展,简单方便,高可靠性,容错。它在大数据领域没有走 Hadoop 生态,而是采用 Local attached storage 作为存储,这样整个 IO 可能就没有 Hadoop 那一套的局限。它的系统在生产环境中可以应用到比较大的规模,因为它的线性扩展能力和可靠性保障能够原生支持 shard + replication 这种解决方案。它还提供了一些 SQL 直接接口,有比较丰富的原生 client。另外就是它比较快。

启动

启动click house服务端
service  clickhouse-server  start/stop  
启动click house客户端
clickhouse-client -m  --支持换行写

数据库

create  database  db_name ;
use db_name ; 切换数据库  ;
select currentDatabase()  ; 
┌─currentDatabase()─┐
│ db_doit19         │
└───────────────────┘
drop  database   db_doit19   ;

数据类型

Int8 .... Int256
UInt8 UInt256  正数
Float32   Float64(相当于double) 
String 
Date 
DateTime

Log引擎(数据分块记录偏移量)

Log 引擎适用于临时数据,write-once 表以及测试或演示目的。

--创建表
create table  `tb_user`(
id String ,
name String ,
age UInt8 ,
birthday  Date
)engine = Log;

数据存储在本地的默认位置(/var/lib/clickhouse/data/default/tb_user)

  1. 数据是以列为文件存储
  2. 插入数据的时候是向文件后面追加数据
  3. xx.bin 列数据
  4. size.json每个文件的大小
  5. 不支持索引
  6. 读写分离
--插入数据
insert into tb_user values('uid0002','wanggang',21,'1999-03-08');
insert into  tb_user  select * from tb_user ;


┌─id──────┬─name─────┬─age─┬───birthday─┐
│ uid0002 │ wanggang │  211999-03-08 │
└─────────┴──────────┴─────┴────────────┘
┌─id──────┬─name────┬─age─┬───birthday─┐
│ uid0001 │ wangben │  271994-02-02 │
└─────────┴─────────┴─────┴────────────┘
┌─id──────┬─name─────┬─age─┬───birthday─┐
│ uid0001 │ wangben  │  271994-02-02 │
│ uid0002 │ wanggang │  211999-03-08 │
└─────────┴──────────┴─────┴────────────┘
表目录
-rw-r-----. 1 clickhouse clickhouse  54 Dec  3 21:58 age.bin
-rw-r-----. 1 clickhouse clickhouse  56 Dec  3 21:58 birthday.bin
-rw-r-----. 1 clickhouse clickhouse  68 Dec  3 21:58 id.bin
-rw-r-----. 1 clickhouse clickhouse  64 Dec  3 21:58 __marks.mrk  数据的块偏移量
-rw-r-----. 1 clickhouse clickhouse  69 Dec  3 21:58 name.bin  
-rw-r-----. 1 clickhouse clickhouse 151 Dec  3 21:58 sizes.json  -- 长度 
__marks.mrk 带标记的文件
标记写在每个数据块上,并且包含偏移量,这些偏移量指示从哪里开始读取文件以便跳过指定的行数。

TinyLog (数据不分块)

这种表引擎的典型用法是 write-once:首先只写入一次数据,然后根据需要多次读取。此引擎适用于相对较小的表(建议最多1,000,000行)。
不能同时读写自己 造成表损坏
表损坏后:
删除表目录
重启服务
删除表

create table  tb_user2(
id String ,
name String ,
age UInt8 ,
birthday  Date
)engine = TinyLog;
insert into tb_user2 select * from tb_user ;
┌─id──────┬─name─────┬─age─┬───birthday─┐
│ uid0001 │ wangben  │  271994-02-02 │
│ uid0002 │ wanggang │  211999-03-08 │
│ uid0001 │ wangben  │  271994-02-02 │
│ uid0002 │ wanggang │  211999-03-08 │
└─────────┴──────────┴─────┴────────────┘
┌─id──────┬─name─────┬─age─┬───birthday─┐
│ uid0001 │ wangben  │  271994-02-02 │
│ uid0002 │ wanggang │  211999-03-08 │
│ uid0001 │ wangben  │  271994-02-02 │
│ uid0002 │ wanggang │  211999-03-08 │
│ uid0001 │ wangben  │  271994-02-02 │
│ uid0002 │ wanggang │  211999-03-08 │
│ uid0001 │ wangben  │  271994-02-02 │
│ uid0002 │ wanggang │  211999-03-08 │
└─────────┴──────────┴─────┴────────────┘

-rw-r-----. 1 clickhouse clickhouse  88 Dec  3 22:37 age.bin
-rw-r-----. 1 clickhouse clickhouse  98 Dec  3 22:37 birthday.bin
-rw-r-----. 1 clickhouse clickhouse 143 Dec  3 22:37 id.bin
-rw-r-----. 1 clickhouse clickhouse 143 Dec  3 22:37 name.bin
-rw-r-----. 1 clickhouse clickhouse 123 Dec  3 22:37 sizes.json
和Log引擎比较底层数据存储不会分块  没有__marks.mrk文件  不支持索引

StripeLog(数据分块列在一起)

StripeLog 引擎将所有列存储在一个文件中。对每一次 Insert 请求,ClickHouse 将数据块追加在表文件的末尾,逐列写入。

create table  tb_user3(
id String ,
name String ,
age UInt8 ,
birthday  Date
)engine = StripeLog;

insert  into  tb_user3 values('001' , '马云',59,'1111-01-02'),('002' , '马化腾',49,'1901-01-02') ;

┌─id──┬─name───┬─age─┬───birthday─┐
│ 001 │ 马云   │  591970-01-01 │
│ 002 │ 马化腾 │  491970-01-01 │
└─────┴────────┴─────┴────────────┘
┌─id──┬─name────┬─age─┬───birthday─┐
│ 001 │ 马liang │  591970-01-01 │
└─────┴─────────┴─────┴────────────┘
┌─id──┬─name───────┬─age─┬───birthday─┐
│ 001 │ 马xiaokang │  591970-01-01 │
│ 002 │ 马kesi     │  491970-01-01 │
└─────┴────────────┴─────┴────────────┘
-rw-r-----. 1 clickhouse clickhouse 623 Dec  3 22:43 data.bin   — 数据文件。
-rw-r-----. 1 clickhouse clickhouse 285 Dec  3 22:43 index.mrk  --带标记的文件。标记包含了已插入的每个数据块中每列的偏移量。
-rw-r-----. 1 clickhouse clickhouse  69 Dec  3 22:43 sizes.json
insert  into  tb_user3 select * from  tb_user ;

总结

共同属性

数据存储在磁盘上。
写入时将数据追加在文件末尾。
不支持突变操作。
不支持索引。这意味着 SELECT 在范围查询时效率不高。
非原子地写入数据。如果某些事情破坏了写操作,例如服务器的异常关闭,你将会得到一张包含了损坏数据的表。

差异

Log 和 StripeLog 引擎支持:
并发访问数据的锁。
INSERT 请求执行过程中表会被锁定,并且其他的读写数据的请求都会等待直到锁定被解除。如果没有写数据的请求,任意数量的读请求都可以并发执行。

并行读取数据。
在读取数据时,ClickHouse 使用多线程。 每个线程处理不同的数据块。

Log 引擎为表中的每一列使用不同的文件。StripeLog 将所有的数据存储在一个文件中。因此 StripeLog 引擎在操作系统中使用更少的描述符,但是 Log 引擎提供更高的读性能。

TinyLog 引擎是该系列中最简单的引擎并且提供了最少的功能和最低的性能。TingLog 引擎不支持并行读取和并发数据访问,并将每一列存储在不同的文件中。它比其余两种支持并行读取的引擎的读取速度更慢,并且使用了和 Log 引擎同样多的描述符。你可以在简单的低负载的情景下使用它。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值