ClickHouse 是什么?

ClickHouse:是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)

我们首先理清一些基础概念

  • OLTP:是传统的关系型数据库,主要操作增删改查,强调事务一致性,比如银行系统、电商系统
  • OLAP:是仓库型数据库,主要是读取数据,做复杂数据分析,侧重技术决策支持,提供直观简单的结果

接着我们用图示,来理解一下列式数据库行式数据库区别

在传统的行式数据库系统中(MySQL、Postgres和MS SQL Server),数据按如下顺序存储:

在列式数据库系统中(ClickHouse),数据按如下的顺序存储:

两者在存储方式上对比:

以上是ClickHouse基本介绍

二、业务问题

业务端现有存储在Mysql中,5000万数据量的大表及两个辅表,单次联表查询开销在3min+,执行效率极低。经过索引优化、水平分表、逻辑优化,成效较低,因此决定借助ClickHouse来解决此问题

最终通过优化,查询时间降低至1s内,查询效率提升200倍!

希望通过本文,可以帮助大家快速掌握这一利器,并能在实践中少走弯路。

三、ClickHouse实践

1.Mac下的Clickhouse安装

我是通过docker安装,也可以下载CK编译安装,相对麻烦一些。

2.数据迁移:从Mysql到ClickHouse

ClickHouse支持Mysql大多数语法,迁移成本低,目前有[五种迁移]

  • create table engin mysql,映射方案数据还是在Mysql
  • insert into select from,先建表,在导入
  • create table as select from,建表同时导入
  • csv离线导入
  • streamsets

选择第三种方案做数据迁移:

CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = Mergetree AS SELECT * FROM mysql('host:port', 'db', 'database', 'user', 'password')

3.性能测试对比
类型 数据量 表大小 查询速度
Mysql 5000万 10G 205s
ClickHouse 5000万 600MB 1s内
4.数据同步方案

临时表

图片来源:新建temp中间表,将Mysql数据全量同步到ClickHouse内temp表,再替换原ClickHouse中的表,适用数据量适度,增量和变量频繁的场景

总结:心得体会

既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。

学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。

面试大厂,最基本的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。

最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。

领取上述资料,只需点击这里即可免费下载

大厂Java架构核心笔记(适合中高级程序员阅读):

免费下载](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)**

大厂Java架构核心笔记(适合中高级程序员阅读):

java并发编程实战电子书,王者笔记!相关推荐

  1. 《Java 并发编程实战》--读书笔记

    Java 并发编程实战 注: 极客时间<Java 并发编程实战>–读书笔记 GitHub:https://github.com/ByrsH/Reading-notes/blob/maste ...

  2. 【极客时间】《Java并发编程实战》学习笔记

    目录: 开篇词 | 你为什么需要学习并发编程? 内容来源:开篇词 | 你为什么需要学习并发编程?-极客时间 例如,Java 里 synchronized.wait()/notify() 相关的知识很琐 ...

  3. 《Java并发编程实战》学习笔记

    什么是并发编程? 跳出来看全局就是3部分:分工.协作.互斥 钻进去看本质:技术的本质就是背后的理论模型 并发理论基础 并发编程产生bug的原因 可见性:cpu缓存导致共享变量在多核cpu的情况下,不可 ...

  4. 《Java并发编程实战》读书笔记

    Subsections  线程安全(Thread safety) 锁(lock) 共享对象 对象组合 基础构建模块 任务执行 取消和关闭 线程池的使用 性能与可伸缩性 并发程序的测试 显示锁 原子变量 ...

  5. 竞态条件的赋值_《Java并发编程实战》读书笔记一:基础知识

    一.线程安全性 一个对象是否是需要是线性安全的,取决于它是否需要被多个线程访问 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要额外的同步,这个 ...

  6. java任何封闭实例都不是java_《java并发编程实战》读书笔记3--对象的组合

    希望将一些现有的线程安全组件组合为更大规模的组件或程序 设计线程安全的类 如果对象中所有的域是基本类型变量,那么这些域将构成对象的全部状态.例如,LinkedList的状态就包括该链表中所有节点对象的 ...

  7. Java并发编程实战(学习笔记十 第十一章 性能与可伸缩性)

    线程的最主要目的是提高程序的运行性能.线程可以使程序更加充分地发挥系统的可用处理能力,从而提高系统的资源利用率.线程还可以在使程序在运行现有任务的情况下立即开始处理新的任务,从而提高系统的响应性. 本 ...

  8. 《java并发编程实战》读书笔记二 对象的发布与逸出

    概念 发布(publishing): 发布一个对象的意思是使它能够被当前范围之外的代码所使用.比如将一个引用存储到其他代码可以访问的地方,在一个非私有的方法中返回这个引用,也可以把它传递到其他类的方法 ...

  9. Java并发编程实战笔记2:对象的组合

    设计线程安全的类 在设计现车让安全类的过程之中,需要包含以下三步: 找出构成对象状态的所有变量 找出约束状态变量的不变性条件 建立对象状态的并发访问策略 实例封闭 通过封闭机制与合适的加锁策略结合起来 ...

  10. Java并发编程实战_不愧是领军人物!这种等级的“Java并发编程宝典”谁能撰写?...

    前言 大家都知道并发编程技术就是在同一个处理器上同时的去处理多个任务,充分的利用到处理器的每个核心,最大化的发挥处理器的峰值性能,这样就可以避免我们因为性能而产生的一些问题. 大厂的核心负载肯定是非常 ...

最新文章

  1. php中abstract和interface的区别
  2. 【题意分析】1024 Palindromic Number (25 分)_38行代码AC
  3. 香辣弹簧:自动接线的不同方法
  4. MySQL数据库数据分开存储
  5. SecureRandom-随机数的生成
  6. Input 输入设备驱动框架
  7. LinuxMint下的Orionode源码安装
  8. 2012禁用ip隧道 win_IMCP协议的魅力——IMCP隧道
  9. 前台登录账号改变时迅速清空记录的登录密码
  10. Vue + Spring Boot 项目实战:人事管理系统——完结撒花
  11. 麒麟信安加入中国首个桌面操作系统根社区openKylin, 共擎开源未来!
  12. 安卓10源码添加系统服务后配置SeLinux让其拥有Sdcard读写权限
  13. 闲鱼是怎么让二手属性抽取准确率达到95%+的?
  14. vim末行模式下的替换操作
  15. 【BZOJ3837】[Pa2013]Filary 随机化神题
  16. Yocto中开发内核的两种方法
  17. SitePoint播客#106:不要成为面巾纸
  18. IQ正交调制及星座图
  19. 注册企业邮箱,怎么给国外的人发邮件?
  20. 刷题-丑数提取及丑数判断

热门文章

  1. Android蓝牙开发实战总结
  2. Android企业级项目实战——基础篇(系列文章)
  3. 打印系统开发(56)——打印机驱动程序设计指南
  4. matlab自动交易系统设计4 随笔
  5. 关于开放源代码的定义
  6. 课程设计之学生选课管理系统
  7. 主键和外键(MySQL)
  8. 精选了20个Python实战项目(附源码),拿走就用!
  9. verilog 简单module_verilog简易教程
  10. c语言函数调用后必须带回返回值?