clickhouse 新增列_Clickhouse入门

本文详细介绍了ClickHouse(CK),一个适用于OLAP的列式存储数据库,强调了其优点如向量引擎和压缩,以及缺点如不支持完整事务。讨论了CK的性能优化技巧,如批量插入和并发操作。此外,文章还涵盖了MergeTree表引擎家族,包括Granule、TTL和ReplicatedMergeTree,以及表引擎的其他成员和SQL语法等,为CK的使用提供了全面指导。
摘要由CSDN通过智能技术生成

clickhouse 简介
ck是一个列式存储的数据库,其针对的场景是OLAP。OLAP的特点是:

  • 数据不经常写,即便写也是批量写。不像OLTP是一条一条写
大多数是读请求 查询并发较少,不适合放置先生高并发业务场景使用 , CK本身建议最大一秒100个并发查询。不要求事务

click的优点#

为了增强压缩比例,ck存储的一列长度固,于是存储的时候,不用在存储该列的长度信息

使用向量引擎 , vector engine ,什么是向量引擎?
https://www.infoq.cn/article/columnar-databases-and-vectorization/?itm_source=infoq_en&itm_medium=link_on_en_item&itm_campaign=item_in_other_langs

clickhouse的缺点#

  • 不能完整支持事务
不能很高吞吐量的修改或删除数据由于索引的稀疏性,不适合基于key来查询单个记录

性能优化#

为了提高插入性能,最好批量插入,最少批次是1000行记录。且使用并发插入能显著提高插入速度。

访问接口#

ck像es一样暴露两个端口,一个tcp的,一个http的。tcp默认端口:9000 ,http默认端口:8123。一般我们并不直接通过这些端口与ck交互,而是使用一些客户端,这些客户端可以是:

  • Command-line Client 通过它可以链接ck,然后进行基本的crud操作,还可以导入数据到ck 。它使用tcp端口链接ck
http interface : 能像es一样,通过rest方式,按照ck自己的语法,提交crudjdbc driverodbc driver

输入输出格式#

ck能够读写多种格式做为输入(即insert),也能在输出时(即select )吐出指定的格式。

比如插入数据时,指定数据源的格式为JSONEachRow

CopyINSERT INTO UserActivity FORMAT JSONEachRow {"PageViews":5, "UserID":"4324182021466249494", "Duration":146,"Sign":-1} {"UserID":"4324182021466249494","PageViews":6,"Duration":185,"Sign":1}

读取数据时,指定格式为JSONEachRow

CopySELECT * FROM UserActivity FORMAT JSONEachRow

值得注意的时指定这些格式应该是ck解析或生成的格式,并不是ck最终的的存储格式,ck应该还是按自己的列式格式进行存储。ck支持多种格式,具体看文档
https://clickhouse.yandex/docs/en/interfaces/formats/#native

数据库引擎#

ck支持在其中ck中创建一个数据库,但数据库的实际存储是Mysql,这样就可以通过ck对该库中表的数据进行crud, 有点像hive中的外表,只是这里外挂的是整个数据库。

假设mysql中有以下数据

Copymysql> USE test;Database changedmysql> CREATE TABLE `mysql_table` (    ->   `int_id` INT NOT NULL AUTO_INCREMENT,    ->   `float` FLOAT NOT NULL,    ->   PRIMARY KEY (`int_id`));Query OK, 0 rows affected (0,09 sec)mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2);Query OK, 1 row affected (0,00 sec)mysql> select * from mysql_table;+--------+-------+| int_id | value |+--------+-------+|      1 |     2 |+--------+-------+1 row in set (0,00 sec)

在ck中创建数据库,链接上述mysql

CopyCREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')

然后就可以在ck中,对mysql库进行一系列操作

df4dfdfa02a1dde7a9a1d3a864dfd7c8.png

表引擎(table engine)—MergeTree 家族

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值