说明

本文使用Docker安装,要在Docker中运行ClickHouse,请遵循 Docker Hub上的指南。它是官方的deb安装包。

更多安装方式..

介绍

ClickHouse 是一个真正的列式数据库管理系统(DBMS)。在 ClickHouse 中,数据始终是按列存储的,包括矢量(向量或列块)执行的过程。只要有可能,操作都是基于矢量进行分派的,而不是单个的值,这被称为«矢量化查询执行»,它有利于降低实际的数据处理开销。

这个想法并不新鲜,其可以追溯到 APL 编程语言及其后代:A +、J、K 和 Q。矢量编程被大量用于科学数据处理中。即使在关系型数据库中,这个想法也不是什么新的东西:比如,矢量编程也被大量用于 Vectorwise 系统中。

通常有两种不同的加速查询处理的方法:矢量化查询执行和运行时代码生成。在后者中,动态地为每一类查询生成代码,消除了间接分派和动态分派。这两种方法中,并没有哪一种严格地比另一种好。运行时代码生成可以更好地将多个操作融合在一起,从而充分利用 CPU 执行单元和流水线。矢量化查询执行不是特别实用,因为它涉及必须写到缓存并读回的临时向量。如果 L2 缓存容纳不下临时数据,那么这将成为一个问题。但矢量化查询执行更容易利用 CPU 的 SIMD 功能。朋友写的一篇研究论文表明,将两种方法结合起来是更好的选择。ClickHouse 使用了矢量化查询执行,同时初步提供了有限的运行时动态代码生成。

了解更多详情…

1.部署 Clickhouse 服务

创建clickhouse 工作目录

1.1, pull 镜像

按照官方推荐的镜像拉取

docker pull yandex/clickhouse-server

查看镜像

Center

1.2,docker-compose 启动镜像

新建 docker-comopose.yml 文件(配置如下)

version: "3.6"

services:

  clickhouse-halobug:
    container_name: clickhouse-halobug.cn
    image: yandex/clickhouse-server:latest
    restart: always
    ports:
      - "8123:8123"
      - "9000:9000"
      - "9009:9009"
    networks:
      - traefik
networks:
  traefik:
    external: true
1启动:docker-compose up -d

查看运行状态 Center

浏览器访问 http://127.0.0.1:8123/ Center

看到这里就启动成功啦,安装成功!

简单吧,简单继续~

==思考:如何修改clickhouse默认配置?数据如何持久化?如何查看日志?==

1.3 更改默认配置,数据持久化,查看日志

进入容器查看配置

docker exec -it clickhouse-halobug.cn(容器名称) /bin/bash

Center

clickhouse 默认配置路径是: /etc/clickhouse-server/

退出容器,复制配置文件当前工作目录

1docker cp 容器名:/etc/clickhouse-server/config.xml .
2    
3docker cp 容器名:/etc/clickhouse-server/uses.xml .

查看目录结构

Center

修改docker-compose 配置文件

volumes: 
  # 默认配置 写入config.d/users.d 目录防止更新后文件丢失
  - ./config.xml:/etc/clickhouse-server/config.d/config.xml:rw
  - ./users.xml:/etc/clickhouse-server/users.xml:rw
  # 运行日志
  - ./logs:/var/log/clickhouse-server
  # 数据持久
  - ./data:/var/lib/clickhouse:rw

修改后的完整配置如下

version: "3.6"

services:

  clickhouse-halobug:
    container_name: clickhouse-halobug.cn
    image: yandex/clickhouse-server:latest
    restart: always
    ports:
      - "8123:8123"
      - "9000:9000"
      - "9009:9009"
    networks:
      - traefik
    volumes: 
      # 默认配置 写入config.d/users.d 目录防止更新后文件丢失
      - ./config.xml:/etc/clickhouse-server/config.d/config.xml:rw
      - ./users.xml:/etc/clickhouse-server/users.xml:rw
      # 运行日志
      - ./logs:/var/log/clickhouse-server
      # 数据持久
      - ./data:/var/lib/clickhouse:rw
networks:
  traefik:
    external: true

重新启动服务

docker-compose down && docker-compose up -d

启动后目录结构

Center

到此数据持久化,默认配置修改,日志映射完成!

验证

浏览器再次访问 http://127.0.0.1:8123/ Center

查看容器日志

Center

进入容器查看服务数据库 Center

服务运行正常!

1.4,==创建用户登录== (后期使用)

查看users.xml文件

自定义用户

<halobug>
    <password_sha256_hex>4754fc7e290a9c280d9497b2d76dd854e77f7e1c92476577fdb52ed22afc13e7</password_sha256_hex>
    <networks incl="networks" replace="replace">
        <ip>::/0</ip>
    </networks>
    <profile>default</profile>
    <quota>default</quota>
    <allow_databases>
        // 自定义对应数据库 tutorial 为测试库
       <database>tutorial</database>
    </allow_databases>
</halobug> 

生成密码(进入容器运行)

PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'

Center

黄色标注为自定义用户,红色为生成密码 Center

验证用户密码,重新启动服务

# 重启
docker-compose down && docker-compose up -d
# 进入容器
docker exec -it clickhouse-halobug.cn /bin/bash
# 验证用户名密码
clickhouse-client -u halobug -h 127.0.0.1 --password qjLlan5A

查看验证结果 Center

成功!到此服务就搭建完成!

1.5 数据导入测试

进入容器内测试

查看官方测试数据指导

导入成功后,查看数据验证 Center

官方提供第三方开发的可视化界面

2.搭建tabix可视化操作

介绍

==需要VPN才能打开的安装 地址,使用镜像就别看这个了==

tabix ClickHouse Web 界面 Tabix.

主要功能:
    浏览器直接连接 ClickHouse,不需要安装其他软件。
    高亮语法的编辑器。
    自动命令补全。
    查询命令执行的图形分析工具。
    配色方案选项。

2.1安装镜像

docker pull spoonest/clickhouse-tabix-web-client

Center

2.2,创建工作目录&配置文件

创建tabix工作目录
新建docker-compose.yml(配置如下)

# docker-compose.yml
version: "3.6"

services:

  clickhouse-halobug:
    container_name: tabix-halobug.cn
    image: spoonest/clickhouse-tabix-web-client
    restart: always
    expose:
      - 80
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=traefik"
      - "traefik.http.routers.tabix-test.entrypoints=https"
      - "traefik.http.routers.tabix-test.rule=Host(`tabix.halobug.cn`)"
      - "traefik.http.routers.tabix-test.tls=true"
      - "traefik.http.services.tabix-test-backend.loadbalancer.server.scheme=http"
      - "traefik.http.services.tabix-test-backend.loadbalancer.server.port=80"
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
networks:
  traefik:
    external: true

启动服务

docker-compose down && docker-compose up -d

查看服务状态

Center

hosts 绑定 :127.0.0.1 tabix.halobug.cn

浏览器访问:https://tabix.halobug.cn Center

安装成功!

2.2,登录Clickhouse

在1.4 创建的账号密码 此时就起到了作用

Center

登录成功后可查看对应权限的数据库

Center

可视化界面到此搭建完成~

3.测试使用

# 进入容器
docker exec -it clickhouse-halobug.cn /bin/bash

# 创建数据库
clickhouse-client --query "CREATE DATABASE IF NOT EXISTS test"

#使用用户名进入
clickhouse-client -u halobug -h 127.0.0.1 --password qjLlan5A

# 创建测试表
CREATE TABLE test.test_son
(
  `id` Int64,
  `name` String, 
  `title` String
) ENGINE = MergeTree ORDER BY id SETTINGS index_granularity = 8192

# 插入数据

INSERT INTO test.test_son VALUES ('1','Hello, world','标题测试'), ('2','Hello, world2','标题测试3')

修改users.xml对halobug 这个用户增加test数据库使用权限,如下图

Center

重新启动服务

刷新 https://tabix.halobug.cn/ ,看到左侧导航的test数据库就是成功了!

Center

程序如何使用?

参考官方 更多程序使用

本机 PHP 测试

PHP脚本使用

#安装
composer require smi2/phpclickhouse

Center

安装成功后 Center

demo 使用

PHP版本:7.3.11

进入 vendor/smi2/phpclickhouse 创建 test.php (内容如下)

<?php

    include_once __DIR__ . '/include.php';
    $config = [
        'host' => '127.0.0.1',
        'port' => '8123',
        'username' => 'halobug',
        'password' => 'qjLlan5A'
    ];
    $db = new ClickHouseDB\Client($config);
    $db->database('test');
    $db->setTimeout(1.5);      // 1500 ms
    $db->setTimeout(10);       // 10 seconds
    $db->setConnectTimeOut(5); // 5 seconds
    
    $stat = $db->insert('test_son',
        [
            [1, 'HASH3','test'],
            [2, 'HASH3_2','test'],
        ],
        ['id', 'name', 'title']
    );
    print_r($stat);

运行脚本测试,运行成功后使用 tabix 查看数据写入成功!

Center

以上是 Clickhouse 单机部署&实践,想了解更多内容,就动手实践吧~