• clickhouse数据结构和常用数据操作


    背景, 大数据中查询用mysql时间太长, 使用clickhouse 速度快, 数据写入mysql后同步到clickhouse中

    测试1千万数据模糊搜索  mysql 需要30-40秒  clickhouse 约   100ms  

    一 数据结构和存储引擎

    1 查看clickhouse所有数据类型

    select * from system.data_type_families;

    2 常用数据类型及同mysql对比

    MySQL

    Clickhouse

    大小(字节)

    数据范围

    tinyint

    Int8

    1

    [-128 : 127]

    smallint

    Int16

    2

    [-32768 : 32767]

    int

    Int32

    3

    [-2147483648 : 2147483647]

    bigint

    Int64

    4

    [-9223372036854775808 : 9223372036854775807]

    Int unsigned

    UInt32

    3

    [0 : 4294967295]

    MySQL

    Clickhouse

    大小(字节)

    有效精度(位数)

    float

    Float32

    4

    6~7

    double

    Flout64

    8

    15~16

    3 表存储引擎 engine

    TinyLog,不分区,不索引,磁盘,列数据文件(.bin)

    Memory,不分区,不索引,内存 (内存中, clickhouse 重启后表结构存在但数据被清空)

    Merge,合并查询,并行查询多张表,类似视图

    MergeTree,分区,索引,稀疏索引文件(.idx),列标识文件(.mrk,建立.idx与.bin之间的映射关系),列数据文件(.bin)

    ReplacingMergeTree,分区,索引,组内去重

    SummingMergeTree,分区,索引,组内聚合

    Distributed分片集群,分布式表

    二 sql操作和数据导入

    1 sql操作

    -- 新建数据库

    CREATE DATABASE IF NOT EXISTS tmp_test;

    -- 新建数据表

    create table demo(id Int32,name String) engine=Memory;

    -- 插入数据 , 注意 字符串使用单引号

    insert into demo(id,name) values(110,'zhangsan');

    -- 查询

    select * from demo where name like '%san%' --字符串不能使用双引号

    2 数据导入

    a csv直接导入, 会新建表, 默认engine是Memory

    b 先新建表,  再csv导入, 好处是可以指定engine是TinyLog

    c 查询出数据数组, 使用代码插入

    三 php操作clickhouse数据库

    GitHub - smi2/phpClickHouse: php ClickHouse wrapper

    composer require smi2/phpclickhouse

    1. $config = [
    2. 'host' => '192.168.1.1',
    3. 'port' => '8123',
    4. 'username' => 'default',
    5. 'password' => ''
    6. ];
    7. $db = new ClickHouseDB\Client($config);
    8. if (!$db->ping()) echo 'Error connect';
    9. # 查看建表sql
    10. $db->database('tmp_test');
    11. echo $db->showCreateTable('demo');
    12. # 插入数据
    13. $db->insert('demo',
    14. [
    15. [1, 'A1'],
    16. [2, 'A2'],
    17. [3, 'A3'],
    18. ],
    19. ['id', 'name']
    20. );
    21. # 查询
    22. $statement = $db->select('SELECT * FROM demo LIMIT 10');
    23. var_dump($statement->rows());

  • 相关阅读:
    [附源码]计算机毕业设计游戏论坛网站Springboot程序
    Node.js-初识Node.js与内置模块
    Kubernetes部署
    Nginx
    keil debug查看变量提示not in scope
    【Flink】flink简介
    Diffusers库的初识及使用
    JAVA常见基础面试问题汇集
    kafka 第一次小整理(草稿篇)————演变[二]
    Kubernetes 集群环境搭建
  • 原文地址:https://blog.csdn.net/u010071211/article/details/134468861