https://hub.docker.com/r/clickhouse/clickhouse-server
https://abc.htmltoo.com/thread-45884.htm # clickhouse 集群部署 - 大数据分析
docker run -d -p 8123:8123 --name ch --restart=always --ulimit nofile=262144:262144 -e TZ='Asia/Shanghai' -v /etc/localtime:/etc/localtime:ro -v /data/file:/data/file -v /data/site/docker/env/mysql/clickhouse/one:/etc/clickhouse-server:ro --link mariadb clickhouse/clickhouse-server
docker exec -it ch /bin/bash
# 设置远程登陆及修改默认用户名密码
config.xml
<!--<listen_host>::</listen_host>-->
<!--<listen_host>::1</listen_host>-->
<listen_host>0.0.0.0</listen_host>
<timezone>Asia/Shanghai</timezone>
---开启web,把以下注释去掉
<!-- Default root page on http[s] server. For example load UI from https://tabix.io/ when opening http://localhost:8123 -->
<!--
<http_server_default_response><![CDATA[<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>]]></http_server_default_response>
-登录Tabix
http://g.htmltoo.com:8123
user.xml
# 将default用户改为只读
# 将<profile>default</profile>改为以下内容
<profile>readonly</profile>
# 新增root用户
# 在</default>下一行添加以下内容
<root>
<password_sha256_hex>275617f1e3d0764300de0505056983006a92dd3877394931bfca978cea0a0259</password_sha256_hex>
<networks incl="networks" replace="replace">
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
</root>
<root>
# echo -n 123456789 | openssl dgst -sha256
# (stdin)= 15e2b0d3c33891ebb0f1ef609ec419420c20e320ce94c65fbc8c3312448eb225
<!-- <password></password> -->
<password_sha256_hex>275617f1e3d0764300de0505056983006a92dd3877394931bfca978cea0a0259</password_sha256_hex>
clickhouse-client --password
-输入密码 c
clickhouse-client -u root --password
-输入密码 c
# 开启 ClickHouse 物化引擎
set global on cluster default max_partitions_per_insert_block = 10000;
SET allow_experimental_database_materialized_mysql = 1
users.xml
<load_balancing>random</load_balancing>
<allow_experimental_window_functions>1</allow_experimental_window_functions>
CREATE DATABASE dbhtmltoo ENGINE = MaterializeMySQL('mariadb:3306', 'dbhtmltoo', 'root', 'wdqdmm@r');
-选择同步的表
CREATE DATABASE IF NOT EXISTS dbhtmltoobak
ENGINE = MaterializeMySQL('mariadb:3306', 'dbhtmltoo', 'root', 'wdqdmm@r')
SETTINGS allows_query_when_mysql_lost=true,max_wait_time_when_mysql_unavailable=10000,materialized_mysql_tables_list='dr_1_blog, dr_1_blog_data_0'
-查询表
show tables;
# 表同步
CREATE TABLE IF NOT EXISTS dr_1_blog ENGINE = MergeTree ORDER BY id AS SELECT * FROM mysql('mariadb:3306','dbhtmltoo','dr_1_blog','root','wdqdmm@r')
CREATE TABLE IF NOT EXISTS dr_1_blog_data_0 ENGINE = MergeTree ORDER BY id AS SELECT * FROM mysql('mariadb:3306','dbhtmltoo','dr_1_blog_data_0','root','wdqdmm@r')
# JDBC-URL
/default?characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai?socket_timeout=300000&session_id=123
应用: clickhouse -> 添加服务端服务: server
镜像: yandex/clickhouse-server:latest
卷:
/etc/localtime:/etc/localtime:ro
/data/file:/data/file
/data/docker/monitor/clickhouse:/etc/clickhouse-server:ro
端口:(http)8123-8123
应用: clickhouse -> 添加交互式客户端服务: client
镜像: yandex/clickhouse-client:latest
命令:
--host server
卷:
/etc/localtime:/etc/localtime:ro
/data/file:/data/file
======================================
备受关注的开源列式数据库,主要用于数据分析(OLAP)领域。
ClickHouse是“战斗民族”俄罗斯搜索巨头Yandex公司开源的一个极具"战斗力"的实时数据分析数据库,是面向 OLAP 的分布式列式DBMS,圈内人戏称为“喀秋莎数据库”。ClickHouse有一个简称"CK",与Hadoop、Spark这些巨无霸组件相比,ClickHouse很轻量级,其特点:
列式存储数据库,数据压缩
关系型、支持SQL
分布式并行计算,把单机性能压榨到极限
高可用
数据量级在PB级别
实时数据更新
索引
================OLAP场景的特点======================
读多于写
不同于事务处理(OLTP)的场景,比如电商场景中加购物车、下单、支付等需要在原地进行大量insert、update、delete操作,数据分析(OLAP)场景通常是将数据批量导入后,进行任意维度的灵活探索、BI工具洞察、报表制作等。
数据一次性写入后,分析师需要尝试从各个角度对数据做挖掘、分析,直到发现其中的商业价值、业务变化趋势等信息。这是一个需要反复试错、不断调整、持续优化的过程,其中数据的读取次数远多于写入次数。这就要求底层数据库为这个特点做专门设计,而不是盲目采用传统数据库的技术架构。
大宽表,读大量行但是少量列,结果集较小
在OLAP场景中,通常存在一张或是几张多列的大宽表,列数高达数百甚至数千列。对数据分析处理时,选择其中的少数几列作为维度列、其他少数几列作为指标列,然后对全表或某一个较大范围内的数据做聚合计算。这个过程会扫描大量的行数据,但是只用到了其中的少数列。而聚合计算的结果集相比于动辄数十亿的原始数据,也明显小得多。
数据批量写入,且数据不更新或少更新
OLTP类业务对于延时(Latency)要求更高,要避免让客户等待造成业务损失;而OLAP类业务,由于数据量非常大,通常更加关注写入吞吐(Throughput),要求海量数据能够尽快导入完成。一旦导入完成,历史数据往往作为存档,不会再做更新、删除操作。
无需事务,数据一致性要求低
OLAP类业务对于事务需求较少,通常是导入历史日志数据,或搭配一款事务型数据库并实时从事务型数据库中进行数据同步。多数OLAP系统都支持最终一致性。
灵活多变,不适合预先建模
分析场景下,随着业务变化要及时调整分析维度、挖掘方法,以尽快发现数据价值、更新业务指标。而数据仓库中通常存储着海量的历史数据,调整代价十分高昂。预先建模技术虽然可以在特定场景中加速计算,但是无法满足业务灵活多变的发展需求,维护成本过高。