1ClickHouse简介
ClickHouse:是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。
OLTP
传统的关系型数据库,主要操作增删改查,强调事务一致性。
也叫做行式数据库系统,例如:MySQL、Postgs和MSSQLServer。
OLAP
仓库型数据库,主要是读取数据,做复杂数据分析,侧重技术决策支持,提供直观简单的结果。
也叫列式数据库系统中,例如:ClickHouse。
行式和列式数据库存储比较:
2ClickHouse优势
假如现在传统的行式数据库MYSQL中,存储万条数据的主表和3张副表,单次联表查询开销在3min+,执行效率极低。
这种情况下,就算优化索引、分表分库、代码优化,在查询效率上提升的也不会显著的。
那么采用ClickHouse,查询时间降低至1s内,查询效率提升倍!
ClickHouse的优势:1、只需要读取要计算的列数据,而非行式的整行数据读取,降低IOcost2、同列同类型,有十倍压缩提升,进一步降低IO3、clickhouse根据不同存储场景,做个性化搜索算法
3ClickHouse实操macOS中用docker安装clickhouse
1、docker安装这里就略过了。
2、docker安装ClickHouse镜像
dockerpullyandex/clickhouse-clientdockerpullyandex/clickhouse-server
3、启动容器服务,加载镜像
dockerrun-d--nameck-server--ulimitnofile=:-p:-p:-p:--volume=$HOME/Documents/ck2_database:/var/lib/clickhouseyandex/clickhouse-server
olume:冒号两侧的路径建立映射,当容器服务读取冒号后面的虚拟机内路径时,会去读冒号前面的本机路径。加这个参数的作用是自定义配置,这个参数可以比较简单的修改部分配置。-p:暴露容器中的端口到本机端口中。本机端口:容器端口。不配置的话可以后面除来虚拟机中,别的地方连不上端口。5/启动容器,并且验证。
dockerexec-itck-server/bin/bash
4、设置密码
1)简易密码。找到安装路径$HOME/Documents/ck2_database/pprocessed_configs/users.xml,然后设置密码passwordxxx/password2)加密密码:1/运行语句:PASSWORD=$(base64/dev/urandom
head-c8);echo"$PASSWORD";echo-n"$PASSWORD"
shasum
tr-d-2/在同上同样的路径中加入上句语句生成的较长的字符串:password_double_sha1_hexxxxxxx/password_double_sha1_hex
5、重启容器,密码连接Clickhouse。
clickhouse-client-h.0.0.1-ddefault-m-udefault--password6QTOnLA9
6、docker操作常用指令
查看镜像:dockerimages删除镜像:dockerrmi[REPOSITORY]查看容器:dockercontainerls-a停止容器:dockercontainerstopb1d6ae2ab删除容器:dockercontainerrmb1d6ae2ab运行容器:dockerb1d6ae2abstart
Mysql数据迁移到ClickHouse
ClickHouse支持Mysql大多数语法,迁移成本低,目前有五种迁移方案:1、catetableenginmysql,映射方案数据还是在Mysql2、insertintoselectfrom,先建表,在导入3、catetableasselectfrom,建表同时导入4、csv离线导入5、stamsets
这里我们采用第三种,建表同时导入方式迁移数据:
CREATETABLE[IFNOTEXISTS][db.]table_nameENGINE=MergeteASSELECT*FROMmysql(host:port,db,database,user,password)
ClickHouse和Mysql性能测试比较数据同步方案
1、采用临时表方案
原理:
新建temp中间表,将Mysql数据全量同步到ClickHouse内temp表,再替换原ClickHouse中的表,适用数据量适度,增量和变量频繁的场景
方案图:
2、采用开源工具synch
开源