2021Java 大厂高频面试题,原理 + 实战 + 视频 + 源码
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.性能测试对比
4.数据同步方案
临时表
图片来源:新建 temp 中间表,将 Mysql 数据全量同步到 ClickHouse 内 temp 表,再替换原 ClickHouse 中的表,适用数据量适度,增量和变量频繁的场景
最后我们该如何学习?
1、看视频进行系统学习
这几年的 Crud 经历,让我明白自己真的算是菜鸡中的战斗机,也正因为 Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去 B 站进行学习,B 站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频资料躺在网盘里,有需要的我也可以分享给你:
2、读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
Spring 源码深度解析:
Mybatis 3 源码深度解析:
Redis 学习笔记:
Spring Boot 核心技术-笔记:
3、面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。
人生短暂,别稀里糊涂的活一辈子,不要将就。
资料领取方式:点击蓝色传送门免费领取上述资料
文章内容中涉及到的 Java 面试题、源码文档,技术笔记等学习资料,均可以免费分享给大家学习,只需你动动手多多支持即可!
评论