[数据库] --- clickhouse

clickhouse是一个列式数据库(系统)。
官方文档
官网比较全,但也可以说比较杂,下面就是我个人的一些总结,以及在实际工作中的应用场景。

1.clickhouse适用场景

clickhouse主要适合那种大量数据做分析的场景。
一般数据insert进去,也就不要修改和删除了。
比如那种埋点的数据,每秒成百上千条插入,但对事务的要求不高。
clickhouse比较吃内存,这也是它比较快的原因之一。
我实际工作的场景,就是把每天几百万甚至几千万的业务数据,在各个维度把数据拉平,存在clickhouse中,所以存的是最细分的数据,然后作为统计报表的查询库,可以查出各个维度下或多个维度下的数据了。

2.clickhouse与mysql类比。

初学的时候,你可以把clickhouse类比mysql来用。
同样的都有数据库,都要创建表,都支持sql标准。
clickhouse的数据也是存在表中的,先建库,再建表,最后insert数据。
clickhouse默认有一个default库,建表的时候,数据类型的定义和mysql不一样,以及引擎也不一样。
clickhouse一般都用的是mergeTree引擎,我们后面也是以这个引擎为例。

3.clickhouse常用数据类型

clickhouse表中的每个字段,都必须在创建表的时候指定数据类型,常用的有以下几种:

1.整形

整型范围
Int8 - [-128 : 127]
Int16 - [-32768 : 32767]
Int32 - [-2147483648 : 2147483647]
Int64 - [-9223372036854775808 : 9223372036854775807]
无符号整型范围
UInt8 - [0 : 255]
UInt16 - [0 : 65535]
UInt32 - [0 : 4294967295]
UInt64 - [0 : 18446744073709551615]

常用UInt16

2.浮点型

Float32, Float64
我用的比较少

3.Decimal

涉及到钱等类似其他精细计算的类型

4.String

最常用的类型,万物皆String

5.Date

精确到天,对应java中,是long类型。
insert的时候注意单位
当表的引擎用mergeTree时,还必须要有个Date类型的字段。

6.DateTime

精确到秒,对应java中,也是long类型
insert的时候,也是注意单位

7.其他

官网还提供了其他类型,平时用不到,所以先不说了

5.clickhouse的引擎

clickhouse提供了很多引擎,我们注意说说mergeTree
mergeTree引擎,主要有个分区的特点。
我们可以指定按天分区,或者按月分区,那么后面查询或者删除的时候,就可以按天或按月。
建表规范如下

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],...INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = MergeTree()
[PARTITION BY expr]
[ORDER BY expr]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]

重点看mergeTree()后面各个属性的定义顺序

删除数据(mergeTree引擎)

带分区的引擎,可以按分区删除。
以按天分区的表举例:
表名:response_event
不需要指定字段名,因为建表的时候已经指定了。

ALTER TABLE response_event DROP PARTITION '2019-11-11';

如果这个字段是null,就用 ‘0000-00-00’

4.实战—java中使用clickhouse

1.使用maven

		<dependency><groupId>ru.yandex.clickhouse</groupId><artifactId>clickhouse-jdbc</artifactId><version>0.1.48</version></dependency>

2.JDBC连接数据库

		ClickHouseProperties properties = new ClickHouseProperties();properties.setDataTransferTimeout(5 * 60 * 1000);properties.setMaxExecutionTime(5 * 60 * 1000);properties.setSocketTimeout(5 * 60 * 1000);ClickHouseDataSource dataSource = new ClickHouseDataSource("jdbc:clickhouse://clickhouse的ip:8123/default", properties);ClickHouseConnection connection = dataSource.getConnection();ClickHouseStatement statement = connection.createStatement();

3.创建表

CREATE TABLE response_event(requestId String,event UInt8,...eventTime DateTime,createDate Date)ENGINE = MergeTree PARTITION BY toDate(createDate) ORDER BY (createDate) SETTINGS index_granularity=8192;
boolean execute = statement.execute(sql);

4.插入数据

INSERT INTO response_event(requestId,event,...eventTime,createDate) values(.......)
boolean execute = statement.execute(sql);

5.查询数据

select count(1) from response_event;
select * from response_event;
		ClickHouseResponse response = statement.executeQueryClickhouseResponse(sql);JSONObject res = JSONObject.parseObject(JSONObject.toJSONString(response));JSONArray data = res.getJSONArray("data");JSONArray meta = res.getJSONArray("meta");

5.clickhouse可视化软件

类似于mysql的navicat,clickhouse常用DBeaver来可视化
DBeaver官网下载,直接安装
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

错误记录:expected single matching bean but found 2

springboot项目&#xff0c;之前有mysql数据源&#xff0c;现在又新增了clickhouse数据源&#xff0c;于是 新增了一个clickhouseDatasource的配置bean&#xff0c;如下&#xff1a; Beanpublic DataSource dataSource() throws PropertyVetoException {HikariConfig config …

消息队列(5):RocketMQ

介绍 RocketMQ是一款成熟的分布式消息中间件。 由阿里2012年开源&#xff0c;2017年成为Apache顶级项目。 源码是java写的。 高性能&#xff0c;低延迟&#xff0c;高可靠。历经多次双十一大促&#xff0c;整体很稳定。 RocketMQ对比其他mq的优势 对比kafka和Rabbitmq&#…

[错误记录] --- clickhouse报错Decimal value is too small

java操作clickhouse数据库&#xff0c;执行insert的时候&#xff0c;报错&#xff1a; Exception in thread "main" ru.yandex.clickhouse.except.ClickHouseException: ClickHouse exception, code: 69, host: xx.xx.xx.xxx, port: xxxx; Code: 69, e.displayText(…

[错误记录] --- rocketmq批量消费设置参数的问题

rocketmq想支持批量消费&#xff0c;于是便设置以下参数&#xff1a; consumer.setConsumeMessageBatchMaxSize(1000);这样是正确的&#xff0c;但由于业务要求&#xff0c;还想再设置大点&#xff0c;于是设置成这样&#xff1a; consumer.setConsumeMessageBatchMaxSize(10…

rocketmq批量消费

rocketmq默认就是可以批量消费的&#xff0c;但需要设置多个参数一起配合。 我们只需要知道他是怎么消费的&#xff0c;就可以很精准的设置他的批量消费参数。 我们看看DefaultMQPushConsumer源码中的这几个参数&#xff1a; /*** 消费消息线程&#xff0c;最小数目*/private …

阿波罗配置中心(apollo)的个人看法

阿波罗应该是近几年比较火的一个分布式配置中心了&#xff0c;说说我个人的理解&#xff0c;希望对一些人有用吧。 首先从使用者的角度想 我们怎么用配置中心的&#xff1f; 1.得有个页面&#xff0c;能有权限管理&#xff0c;能有创建配置key-value。 在阿波罗中&#xff…

架构师成长之路

一个架构师要掌握的最基本的数学知识 知识点备注log三角函数二项式定理多项式合并极限幂函数泰勒级数傅里叶级数概率

消息队列(4):Kafka

介绍 kafka是一个支持分布式的消息系统&#xff0c;基于发布/订阅模式。 kafka由LinkedIn公司开发&#xff0c;2010年成为Apache顶级项目。 源码是由java写的。 基本概念 1、Broker kafka集群中的每台机器&#xff0c;都叫一个broker. 2、Topic&#xff08;主题&#xff0…

clickhouse的ReplacingMergeTree引擎实战

学习ReplacingMergeTree引擎&#xff0c;首先你得了解clickhouse的MergeTree引擎&#xff0c;因为ReplacingMergeTree引擎是MergeTree引擎的一个扩展版引擎&#xff0c;他拥有和MergeTree一样的功能&#xff0c;同时新增了一个删除相同主键数据的功能。 我们知道&#xff0c;cl…

clickhouse 分片

我们知道mysql数据库如果想做分片&#xff0c;需要使用第三方组件&#xff0c;这是因为mysql在设计之初就没有太多考虑分布式等问题。而clickhouse作为新生代性能之王&#xff0c;分片也是必须的功能。基本上从2015年之后的各种数据库也罢&#xff0c;框架也罢&#xff0c;都开…

[记录] ---阿里云java.io.IOException: Connection reset by peer的问题

项目部署到阿里云&#xff0c;突然报错&#xff0c;频繁的打印堆栈信息&#xff0c;一开始是把堆内存打满导致服务一直重启&#xff0c;调大堆内存后就不影响正常服务了&#xff0c;但还是一直打堆栈&#xff0c;虽说日志会自动清理&#xff0c;但一直打这个信息着实不好看。 最…

数据库缓存双写一致性的一些个人想法

数据库缓存双写一致性的一些个人想法 有这么个问题&#xff0c;还是经典面试题&#xff1a; 说我们有个数据库&#xff0c;他的读请求特别多&#xff0c;以至于要在数据库上加一层缓存来抗压&#xff0c;这个都能理解吧。 这里的缓存&#xff0c;可能是和数据库一样的数据&am…

2020年规划

1.去其他城市&#xff0c;市级城市超过3个。 2.继续想着通过其他方式赚钱。 3.选一个技术体系&#xff0c;搞精通&#xff0c;比如数据库&#xff0c;比如高并发分布式等 4.搞个自己的网站&#xff0c;国庆前平均每天100访问量。 5.12点前睡觉 2020年1月5日&#xff0c;2020年…

实用的java代码生成器,开箱即用(基于mybatisplus的AutoGenerator)

spring-boot工程下&#xff0c;自动生成代码&#xff0c;controller层&#xff0c;service层&#xff0c;mapper层。 根据数据库配置好的表&#xff0c;逆向生成实体类和各层结构 1、引入maven <dependency><groupId>com.baomidou</groupId><artifactId&…

mac/windows 端口占用解决记录

idea启动报错&#xff1a;端口占用 The port may already be in use or the connector may be misconfigured mac端口占用解决 zhangshuaideMacBook-Pro:~ zhangshuai$ lsof -i:8095 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Google 375 zhangshuai 32u IPv6 0x…

[配置中心] --- consul

mac下载安装consul 1、下载&#xff1a;consul下载地址 2、解压到目录/usr/local/bin下 3、执行consul文件 4、验证&#xff1a;控制台输入consul验证 5、启动consul&#xff1a;consul agent -dev windows安装consul 1、下载&#xff0c;解压到D:\soft&#xff0c;将这个路…

[java基础] --- java开发,service层是不是一定要写接口

估计很多java开发的同学都遇到过&#xff0c;service层要写一个接口&#xff0c;然后再写接口的实现类&#xff0c;但这个接口从项目开始到项目倒闭&#xff0c;都不会有第二个实现&#xff0c;那为什么不直接写个service类呢&#xff1f;如果你还没想过这个问题&#xff0c;那…

浅谈权限(功能权限数据权限)

一般企业上的权限部分&#xff0c;都是区分为功能权限和数据权限。 一、功能权限 功能权限&#xff0c;就是用户登录后&#xff0c;能看到哪些菜单&#xff0c;能看到哪些按钮&#xff0c;能执行哪些操作的权限。 一般&#xff0c;功能权限&#xff0c;已经都有很成熟的业内方…

一个技术负责人应该知道的规范细节

前言&#xff1a; 作为一个技术负责人&#xff0c;不能只定义一个项目的技术选型&#xff0c;而不注意开发细节。 开发前&#xff0c;如果不预先定义好规范&#xff0c;那么项目中就会乱成一锅粥。每个人自成一派&#xff0c;单看每个人的模块&#xff0c;貌似都没啥大问题&am…

skywalking(1) 基于opentracing规范的APM系统

skywalking是&#xff1a; 基于opentracing规范的APM系统 skywalking解决了什么问题&#xff1f; skywalking解决微服务架构下&#xff0c;多服务直接复杂的调用关系 了解dapper&#xff0c;分布式链路追踪系统 dapper又是谷歌论文&#xff0c;各公司又相继模仿。&#xff…