码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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());

  • 相关阅读:
    领域模型优先于数据库表
    webpack优化系列四:vue打包后生成的chunk-vendors文件过大,利用SplitChunks插件,分离chunk
    MySQL基础篇【第六篇】| 存储引擎、事务、索引、视图、DBA命令、数据库设计三范式
    【Flask框架】四. Flask框架之 MySQL数据库操作及项目重构
    JAVA JDBC 概述
    Spring Boot 注解
    在2023年使用Unity2021从Built-in升级到Urp可行么
    LeetCode简单题之判断两个事件是否存在冲突
    Web前端:React对比Vue,哪一个最适合开发人员?
    Python+大数据-Spark技术栈(三) SparkCore加强
  • 原文地址:https://blog.csdn.net/u010071211/article/details/134468861
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号