引言
微服务、分布式大行其道的当下,中、高级Java工程师面试题中高并发、大数据量、分库分表等已经成了面试的高频词汇,这些知识不了解面试通过率不会太高。
你可以不会用,但你不能不知道,就是这么一种现状。技术名词大多晦涩难懂,不要死记硬背理解最重要,当你捅破那层窗户纸,发现其实它也就那么回事。
一、为什么要分库分表
关系型数据库以MySQL为例,单机的存储能力、连接数是有限的,它自身就很容易会成为系统的瓶颈。当单表数据量在百万以里时,我们还可以通过添加从库、优化索引提升性能。
一旦数据量朝着千万以上趋势增长,再怎么优化数据库,很多操作性能仍下降严重。为了减少数据库的负担,提升数据库响应速度,缩短查询时间,这时候就需要进行分库分表。
二、如何分库分表
分库分表就是要将大量数据分散到多个数据库中,使每个数据库中数据量小响应速度快,以此来提升数据库整体性能。
核心理念就是对数据进行切分(Sharding),以及切分后如何对数据的快速定位与整合。
针对数据切分类型,大致可以分为:垂直(纵向)切分和水平(横向)切分两种。
1、垂直切分
垂直切分又细分为垂直分库和垂直分表
垂直分库
垂直分库是基于业务分类的,和我们常听到的微服务治理观念很相似,每一个独立的服务都拥有自己的数据库,需要不同业务的数据需接口调用。
而垂直分库也是按照业务分类进行划分,每个业务有独立数据库,这个比较好理解。
垂直分表
垂直分表是基于数据表的列为依据切分的,是一种大表拆小表的模式。
例如:一个order表有很多字段,把长度较大且访问不频繁的字段,拆分出来创建一个单独的扩展表work_extend进行存储。
order表:
id | workNo | price | describe | … |
---|---|---|---|---|
int(12) | int(2) | int(15) | varchar(2000) |
首先到这里下载其源码。里面东西挺多的,我们基本上可以把它放到两个文件夹就是...
目录 读者基础 ?微服务架构梳理 https://www.coder4.com/homs_online/ ? ? 读者...
由于固态驱动器(SSD)的速度比传统的硬盘驱动器(HDD)快得多,并且价格越来越便宜...
MFC项目在vs2017编译正常无报错,但是升级vs2019后一打开项目就报如下错误。 项...
本文实例为大家分享了vue实现按钮切换图片的具体代码,供大家参考,具体内容如下...
目录 1. C语言文件接口(库函数) 1.1 fopen 1.2 fclose 1.3 fread 1.4 fwrite 1.5...
在大三的时候,一直就想搭建属于自己的一个博客,但由于各种原因,最终都不了了...
本文实例为大家分享了javascript实现倒计时提示框的具体代码,供大家参考,具体...
这5个PHP编程中的不良习惯,一定要改掉 PHP世界上最好的语言! 测试循环前数组是...
今天看到个不错的网页播放器,感觉不错,大家可以测试 我写的一个播放器网页: ...