五⾯拿下阿⾥飞猪offer,熬夜整理Java⾼频⾯试题
前⾔
Spring如何解决的循环依赖,是近两年流⾏起来的⼀道Java⾯试题。其实笔者本⼈对这类框架源码题还是持⼀定的怀疑态度的。如果笔者作为⾯试官,可能会问⼀些诸如“如果注⼊的属性为null,你会从哪⼏个⽅向去排查”这些场景题。那么既然写了这篇⽂章,闲话少说,发车看看Spring是如何解决的循环依赖,以及带⼤家看清循环依赖的本质是什么。
ClickHouse 是什么?
ClickHouse:是⼀个⽤于联机分析(OLAP)的列式数据库管理系统(DBMS)
我们⾸先理清⼀些基础概念
OLTP:是传统的关系型数据库,主要操作增删改查,强调事务⼀致性,⽐如银⾏系统、电商系统
OLAP:是仓库型数据库,主要是读取数据,做复杂数据分析,侧重技术决策⽀持,提供直观简单的结果
接着我们⽤图⽰,来理解⼀下列式数据库和⾏式数据库区别
在传统的⾏式数据库系统中(MySQL、Postgres和MS SQL Server),数据按如下顺序存储:
font weight在列式数据库系统中(ClickHouse),数据按如下的顺序存储:
两者在存储⽅式上对⽐:
以上是ClickHouse基本介绍
⼆、业务问题
业务端现有存储在Mysql中,5000万数据量的⼤表及两个辅表,单次联表查询开销在3min+,执⾏效率极低。经过索引优化、⽔平分表、逻辑优化,成效较低,因此决定借助ClickHouse来解决此问题
最终通过优化,查询时间降低⾄1s内,查询效率提升200倍!
希望通过本⽂,可以帮助⼤家快速掌握这⼀利器,并能在实践中少⾛弯路。
三、ClickHouse实践
1.Mac下的Clickhouse安装
我是通过docker安装,也可以下载CK编译安装,相对⿇烦⼀些。查mysql版本命令
2.数据迁移:从Mysql到ClickHouse
ClickHouse⽀持Mysql⼤多数语法,迁移成本低,⽬前有[五种迁移]
create table engin mysql,映射⽅案数据还是在Mysql
insert into select from,先建表,在导⼊
mysql面试题sqlcreate 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')
二进制检验和xor3.性能测试对⽐
类型数据量表⼤⼩查询速度
Mysql5000万10G205s
ClickHouse5000万600MB1s内
4.数据同步⽅案
临时表
图⽚来源:新建temp中间表,将Mysql数据全量同步到ClickHouse内temp表,再替换原ClickHouse中的表,适⽤数据量适度,增量和变量频繁的场景
最后
很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有⼤量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与⼤⼚擦肩⽽过。
我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识与项⽬实战的结合,我觉得只要你肯花时间⽤⼼学完这些,⼀定可以快速掌握并发编程。
不管是查缺补漏还是深度学习都能有⾮常不错的成效,需要的话记得帮忙点个赞⽀持⼀下
网页版智慧职教⼀下
git处理pull冲突整理不易,觉得有帮助的朋友可以帮忙点赞分享⽀持⼀下⼩编~
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论