数据源管理 | OLAP查询引擎,ClickHouse集群化管理
本文源碼: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 1310723、取消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 start6、登錄客戶端查看
這里登錄任意一臺服務就好
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.DruidDataSourceclick:driverClassName: ru.yandex.clickhouse.ClickHouseDriverurl: jdbc:clickhouse://127.0.0.1:8123/default,jdbc:clickhouse://127.0.0.1:8123/default,jdbc:clickhouse://127.0.0.1:8123/defaultcluster: jdbc:clickhouse://127.0.0.1:8123/defaultinitialSize: 10maxActive: 100minIdle: 10maxWait: 60002、管理接口
分別向每個單節點服務創建表和寫入數據:
data_shard(單節點數據)
data_all(分布數據)
@RestController public class DataShardWeb {@Resourceprivate 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 {@Resourceprivate JdbcParamConfig jdbcParamConfig ;@Beanpublic 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組件,同步數據和源碼分析 |
總結
以上是生活随笔為你收集整理的数据源管理 | OLAP查询引擎,ClickHouse集群化管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Poj_3984走迷宫(广搜)
- 下一篇: JEECG - 基于代码生成器的J2EE