本文原始碼:GitHub·點這里 || GitEE·點這里
一、列式庫簡介
ClickHouse是俄羅斯的Yandex公司于2016年開源的列式存盤資料庫(DBMS),主要用于OLAP在線分析處理查詢,能夠使用SQL查詢實時生成分析資料報告,
列式存盤

行式存盤和列式存盤,資料在磁盤上的組織結構有著根本不同,資料分析計算時,行式存盤需要遍歷整表,列式存盤只需要遍歷單個列,所以列式庫更適合做大寬表,用來做資料分析計算,
絮叨一句:注意這里比較的場景,是資料分析計算的場景,
二、集群配置
1、基礎環境
ClickHouse單服務默認已經安裝完畢
- Linux下安裝ClickHouse單機服務
- SpringBoot整合ClickHouse列式資料庫
2、取消檔案限制
vim /etc/security/limits.conf
vim /etc/security/limits.d/90-nproc.conf
檔案末尾追加
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
3、取消SELINUX
修改/etc/selinux/config中的SELINUX=disabled后重啟
4、集群組態檔
服務分別添加集群配置:vim /etc/metrika.xml
<yandex>
<clickhouse_remote_servers>
<clickhouse_cluster>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>192.168.72.133</host>
<port>9000</port>
</replica>
</shard>
<shard>
<replica>
<internal_replication>true</internal_replication>
<host>192.168.72.136</host>
<port>9000</port>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>192.168.72.137</host>
<port>9000</port>
</replica>
</shard>
</clickhouse_cluster>
</clickhouse_remote_servers>
<zookeeper-servers>
<node index="1">
<host>192.168.72.133</host>
<port>2181</port>
</node>
<node index="2">
<host>192.168.72.136</host>
<port>2181</port>
</node>
<node index="3">
<host>192.168.72.137</host>
<port>2181</port>
</node>
</zookeeper-servers>
<macros>
<replica>192.168.72.133</replica>
</macros>
<networks>
<ip>::/0</ip>
</networks>
<clickhouse_compression>
<case>
<min_part_size>10000000000</min_part_size>
<min_part_size_ratio>0.01</min_part_size_ratio>
<method>lz4</method>
</case>
</clickhouse_compression>
</yandex>
注意這里
<macros>
<replica>192.168.72.133</replica>
</macros>
配置各自服務的IP地址,
5、啟動集群
分別啟動三臺服務
service clickhouse-server start
6、登錄客戶端查看
這里登錄任意一臺服務就好
clickhouse-client
en-master :) select * from system.clusters

這里這里集群名稱:clickhouse_cluster,后續使用,
7、基本環境測驗
三臺服務上同時創建表結構,
CREATE TABLE ontime_local (FlightDate Date,Year UInt16) ENGINE = MergeTree(FlightDate, (Year, FlightDate), 8192);
133環境創建分布表
CREATE TABLE ontime_all AS ontime_local ENGINE = Distributed(clickhouse_cluster, default, ontime_local, rand());
隨便寫入一臺服務資料
insert into ontime_local (FlightDate,Year) values ('2020-03-12',2020);
查詢總表
select * from ontime_all;
寫入總表,資料會分布到各個單表中
insert into ontime_all (FlightDate,Year)values('2001-10-12',2001);
insert into ontime_all (FlightDate,Year)values('2002-10-12',2002);
insert into ontime_all (FlightDate,Year)values('2003-10-12',2003);
任意關閉一臺服務,集群查詢直接掛掉
三、集群環境整合
1、基礎配置
url:配置全部的服務串列,主要用來管理表結構,批量處理;
cluster:集群連接服務,可以基于Nginx代理服務配置;
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
click:
driverClassName: ru.yandex.clickhouse.ClickHouseDriver
url: jdbc:clickhouse://127.0.0.1:8123/default,jdbc:clickhouse://127.0.0.1:8123/default,jdbc:clickhouse://127.0.0.1:8123/default
cluster: jdbc:clickhouse://127.0.0.1:8123/default
initialSize: 10
maxActive: 100
minIdle: 10
maxWait: 6000
2、管理介面
分別向每個單節點服務創建表和寫入資料:
data_shard(單節點資料)
data_all(分布資料)
@RestController
public class DataShardWeb {
@Resource
private JdbcFactory jdbcFactory ;
/**
* 基礎表結構創建
*/
@GetMapping("/createTable")
public String createTable (){
List<JdbcTemplate> jdbcTemplateList = jdbcFactory.getJdbcList();
for (JdbcTemplate jdbcTemplate:jdbcTemplateList){
jdbcTemplate.execute("CREATE TABLE data_shard (FlightDate Date,Year UInt16) ENGINE = MergeTree(FlightDate, (Year, FlightDate), 8192)");
jdbcTemplate.execute("CREATE TABLE data_all AS data_shard ENGINE = Distributed(clickhouse_cluster, default, data_shard, rand())");
}
return "success" ;
}
/**
* 節點表寫入資料
*/
@GetMapping("/insertData")
public String insertData (){
List<JdbcTemplate> jdbcTemplateList = jdbcFactory.getJdbcList();
for (JdbcTemplate jdbcTemplate:jdbcTemplateList){
jdbcTemplate.execute("insert into data_shard (FlightDate,Year) values ('2020-04-12',2020)");
}
return "success" ;
}
}
3、集群查詢
上述步驟執行完成后,可以連接集群服務查詢分布總表和單表的資料,
基于Druid連接
@Configuration
public class DruidConfig {
@Resource
private JdbcParamConfig jdbcParamConfig ;
@Bean
public DataSource dataSource() {
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(jdbcParamConfig.getCluster());
datasource.setDriverClassName(jdbcParamConfig.getDriverClassName());
datasource.setInitialSize(jdbcParamConfig.getInitialSize());
datasource.setMinIdle(jdbcParamConfig.getMinIdle());
datasource.setMaxActive(jdbcParamConfig.getMaxActive());
datasource.setMaxWait(jdbcParamConfig.getMaxWait());
return datasource;
}
}
基于mapper查詢
<mapper namespace="com.ckhouse.cluster.mapper.DataAllMapper">
<resultMap id="BaseResultMap" type="com.ckhouse.cluster.entity.DataAllEntity">
<result column="FlightDate" jdbcType="VARCHAR" property="flightDate" />
<result column="Year" jdbcType="INTEGER" property="year" />
</resultMap>
<select id="getList" resultMap="BaseResultMap" >
select * from data_all where Year=2020
</select>
</mapper>
四、源代碼地址
GitHub·地址
https://github.com/cicadasmile/data-manage-parent
GitEE·地址
https://gitee.com/cicadasmile/data-manage-parent

推薦閱讀:資料源管理
| 序號 | 標題 |
|---|---|
| A01 | 資料源管理:主從庫動態路由,AOP模式讀寫分離 |
| A02 | 資料源管理:基于JDBC模式,適配和管理動態資料源 |
| A03 | 資料源管理:動態權限校驗,表結構和資料遷移流程 |
| A04 | 資料源管理:關系型分庫分表,列式庫分布式計算 |
| A05 | 資料源管理:PostGreSQL環境整合,JSON型別應用 |
| A06 | 資料源管理:基于DataX組件,同步資料和原始碼分析 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/190791.html
標籤:Java
上一篇:Oracle用decode函式或CASE-WHEN實作自定義排序
下一篇:服務器軟體大掃盲
