赞
踩
目录
Clickhouse 官网地址:
ClickHouse是一个由俄罗斯的Yandex于2016年开源的面向OLAP(联机分析处理)的列式数据库管理系统(DBMS)。它采用C++语言开发,以卓越的查询性能著称,并且在基准测试中超越了众多主流的列式数据库。
ClickHouse数据库的应用场景主要集中在那些需要高效处理和分析大量数据的领域。
1. 本地表 - 用来批量写数据使用,通常后缀带_local标识
- CREATE TABLE pricing.t_test_local
- (
-
- UPDATED_DATE DateTime,
-
- SCORE_RUN_ID String,
-
- ORGAN2 String,
-
- CHANNEL Nullable(String),
-
- RENEW_TYPE Nullable(String),
-
- PRICING_COUNT Decimal(3, 0),
-
- ACTUAL_PREMIUMN Nullable(Decimal(3, 0)),
-
- )
- ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/t_test_local/{shard}','{replica}',UPDATED_DATE)
- PARTITION BY tuple(ORGAN2)
- ORDER BY tuple(SCORE_RUN_ID)
- SETTINGS index_granularity = 8192;
-
- --释义
- pricing: 指具体数据库用户名
- Nullable:修饰列类型标识该列可能为空
- ReplicatedReplacingMergeTree:多副本去重合并树表引擎,具体可参考其他表引擎,如ReplicatedMergeTree可以使用ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/t_test_local','{replica}')
- ORGAN2:用来做数据分区的列
- SCORE_RUN_ID:主键索引列
2. 分布式表 - 用来应用对接查询使用,指向本地表,通常后缀带_all标识
- CREATE TABLE IF NOT EXISTS t_test_all ON CLUSTER cluster_2_shard_2_replicas AS pricing.t_test_local
- ENGINE = Distributed('cluster_2_shard_2_replicas','pricing','t_test_local',rand())
-
--释义
cluster_2_shard_2_replicas:集群名称,建库时提前会创建好
可以借助数据同步工具同步,也可自行编写同步程序进行同步,可以采用Clickhouse JDBC进行PreparedStatement.addBatch()批量方式提交,不推荐使用Mybatis方式处理
- <dependency>
- <groupId>com.clickhouse</groupId>
- <artifactId>clickhouse-jdbc</artifactId>
- <version>0.4.1</version>
- <classifier>http</classifier>
- </dependency>
可采用MyBatis或JDBC方式分析数据,基本与Oracle语法一致,一般分析结构:SELECT 列,SUM(指标) FROM 表名 WHERE ... GROUP BY 列
1)建议Clickhouse的分析维度列使用字符类型(String),指标列则使用数值类型(Decimal)
2)建议分区数量按总体表数量提前计算,每个分区可均匀分布1000万的数据量(假设一张表有1亿条,那么分区数为10个左右)
3)建议同步数据时批量提交的量为2000一组
4)存在空值或不确定的列请务必加上Nullable()将列类型包含进去,否则数据会写不进去,导致最终的数量对不上
5)上亿数据表统计查询耗时一般都在毫秒级别,如果达到秒级或更久需检查程序是否存在性能问题,可在数据库查询工具中对比(如dbeaver)
6)Clickhouse的数据压缩率常规表结构一般都在10%~20%之间,这也是其列式结构对于数据存储相比于OLTP数据库的优势
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。