您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

MySQL:高并发情况下,数据库该如何设计?

时间:2021-06-18 09:25:31  来源:公众号  作者:追逐仰望星空

题目:高并发情况下,数据库该如何设计

JAVA高级面试题:为什么要分库分表( 设计高并发系统的时候 , 数据库层面该如何设计 ) ? 用过哪些分库分表中间件 ? 不同的分库分表中间件都有什么优点和缺点? 你们具体是如何对数据库 如何进行垂直拆分或水平拆分的?

题目来源:Java高级架构面试知识点整理--MySQL分库分表问题(附解析,如下图)

面试突击MySQL:高并发情况下,数据库该如何设计?

Java高级面试:MySQL分库分表问题

Java高级架构面试知识点整理:包含消息队列、redis缓存、MySQL分库分表、读写分离、设计高并发系统、分布式系统、高可用架构、SpringCloud微服务架构 等8大类近200页的内容,从面试官心理分享 到 面试题剖析,一步一步扣题深入,通俗易懂,是不可多得的干货!

如需原件学习,可私信@追逐仰望星空口令【高级】分享!

面试官心理分析

其实这块肯定是扯到高并发了,因为分库分表一定是为了支撑高并发、数据量大两个问题的。而且现在说实话,尤其是互联网类的公司面试,基本上都会来这么一下,分库分表如此普遍的技术问题,不问实在是不行,而如果你不知道那也实在是说不过去!

面试突击MySQL:高并发情况下,数据库该如何设计?

 

面试题剖析

为什么要分库分表?(设计高并发系统的时候,数据库层面该如何设计?)

说白了,分库分表是两回事儿,大家可别搞混了,可能是光分库不分表,也可能是光分表不分库,都有可能。我先给大家抛出来一个场景:

假如我们现在是一个小创业公司(或者是一个BAT公司刚兴起的一个新部门),现在注册用户就20万,每天活跃用户就1万,每天单表数据量就1000,然后高峰期每秒钟并发请求最多就10。天,就这种系统,随便找一个有几年工作经验的,然后带几个刚培训出来的,随便干什么都可以。

结果没想到我们运气居然这么好,碰上个CEO带着我们走上了康庄大道,业务发展迅猛,过了几个月,注册用户数达到了2000万!每天活跃用户数100万!每天单表数据量10万条!高峰期每秒最大请求达到1000!同时公司还顺带着融资了两轮,进账了几个亿人民币啊!公司估值达到了惊人的几亿美金!这是小独角兽的节奏!

好吧,没事,现在大家感觉压力已经有点大了,为啥呢?因为每天多10万条数据,一个月就多300万条数据,现在咱们单表已经几百万数据了,马上就破千万了。但是勉强还能撑着。高峰期请求现在是1000,咱们线上部署了几台机器,负载均衡搞了一下,数据库撑1000QPS也还凑合。但是大家现在开始感觉有点担心了,接下来咋整呢..... .

在接下来几个月,我的天,CEO 太牛逼了,公司用户数已经达到1亿,公司继续融资几十亿人民币啊!公司估值达到了惊人的几十亿美金,成为了国内今年最牛逼的明星创业公司!天,我们太幸运了。

但是我们同时也是不幸的,因为此时每天活跃用户数上千万,每天单表新增数据多达 50万,目前一个表总数据量都已经达到了两三千万了!扛不住啊!数据库磁盘容量不断消耗掉!高峰期并发达到惊人的

5000~8000!别开玩笑了,哥。我跟你保证,你的系统支撑不到现在,已经挂掉了!

好吧,所以你看到这里差不多就理解分库分表是怎么回事儿了,实际上这是跟着你的公司业务发展走的,你公司业务发展越好,用户就越多,数据量越大,请求量越大,那你单个数据库一定扛不住。

面试突击MySQL:高并发情况下,数据库该如何设计?

 

分表

比如你单表都几千万数据了,你确定你能扛住么?绝对不行,单表数据量太大,会极大影响你的 sql 执行的性能,到了后面你的 sql可能就跑得很慢了。一般来说,就以我的经验来看,单表到几百万的时候,性能就会相对差一些了,你就得分表了。

分表是啥意思?就是把一个表的数据放到多个表中,然后查询的时候再查一个表。比如按照用户id来分表,将一个用户的数据就放在一个表中。然后操作的时候你对一个用户就操作那个表就好了。这样可以控制每个表的数据量在可控的范围内,比如每个表就固定在 200万以内。

分库

分库是啥意思?就是你一个库一般我们经验而言,最多支撑到并发2000,一定要扩容了,而且一个健康的单库并发值你最好保持在每秒1000 左右,不要太大。那么你可以将一个库的数据拆分到多个库中,访问的时候就访问一个库好了。

这就是所谓的分库分表,为啥要分库分表?你明白了吧。

面试突击MySQL:高并发情况下,数据库该如何设计?

 

你们具体是如何对数据库如何进行垂直拆分或水平拆分的?

水平拆分的意思,就是把一个表的数据给弄到多个库的多个表里去,但是每个库的表结构都一样,只不过每个库表放的数据是不同的,所有库表的数据加起来就是全部数据。水平拆分的意义,就是将数据均匀放在更多的库里,然后用多个库来扛更高的并发,还有就是用多个库的存储容量来进行扩容。

面试突击MySQL:高并发情况下,数据库该如何设计?

 

垂直拆分的意思,就是把一个有很多字段的表给拆分成多个表,或者是多个库上去。每个库表的结构都不一样,每个库表都包含部分字段。一般来说,会将较少的访问频率很高的字段放到一个表里去,然后将较多的访问频率很低的字段放到另外一个表里去。因为数据库是有缓存的,你访问频率高的行字段越少,就可以在缓存里缓存更多的行,性能就越好。这个一般在表层面上做得较多一些。

面试突击MySQL:高并发情况下,数据库该如何设计?

 

还有表层面的拆分,就是分表,将一个表变成N个表,就是让每个表的数据量控制在一定范围内,保证SQL 的性能。否则单表数据量越大,SQL性能就越差。一般是200万行左右,不要太多,但是也得看具体你怎么操作,也可能是500万,或者是100万。你的SQL越复杂,就最好让单表行数越少。

涉及高并发系统,我该怎么办?

如果不想只是单纯地做个底层CRUD的搬砖程序员,那么对于高并发系统设计这一类的问题,你必须得掌握!不用慌,小编整理了46问,贯穿整个高并发系统设计的问题,涉及:基础、数据库、缓存、消息队列、分布式、维护、实战操练等7个部分的内容(并将每一问的答案解析整理完整)。

面试突击MySQL:高并发情况下,数据库该如何设计?

 

  1. 为什么要学习高并发系统设计?
  2. 高并发系统:它的通用设计方法是什么
  3. 架构分层:我们为什么一定要这么做
  4. 系统设计目标(一):如何提升系统性能
  5. 系统设计目标(二):系统怎样做到高可用
  6. 系统设计目标(三):如何让系统易于扩展
  7. 面试现场第一期:当问到组件实现原理时,面试官是在刁难你吗?
  8. 池化技术:如何减少频繁创建数据库连接的性能损耗?
  9. 数据库优化方案(一):查询请求增加时,如何做主从分离
  10. 数据库优化方案(二):写入数据量增加时,如何实现分库分表
  11. 发号器:如何保证分库分表后ID的全局唯─性?
  12. NoSQL:在高并发场景下,数据库和 NoSQL 如何做到互补?
  13. 缓存:数据库成为瓶颈后,动态数据的查询要如何加速?
  14. 缓存的使用姿势(一):如何选择缓存的读写策略?
  15. 缓存的使用姿势(二):缓存如何做到高可用?
  16. 缓存的使用姿势(三):缓存穿透了怎么办?
  17. CDN:静态资源如何加速?
  18. 数据的迁移应该如何做?
  19. 消息队列:秒杀时如何处理每秒上万次的下单请求?
  20. 消息投递:如何保证消息仅仅被消费一次?
  21. 消息队列:如何降低消息队列系统中消息的延迟?
  22. 面试现场第二期:当问到项目经验时,面试官究竟想要了解什么
  23. 从“心”出发,我还有无数个可能
  24. 高并发系统设计期中测试题目解析
  25. 系统架构:每秒1万次请求的系统要做服务化拆分吗?
  26. 微服务架构:微服务化后系统架构要如何改造?
  27. RPC框架:10万 Q P S 下如何实现毫秒级的服务调用?
  28. 注册中心:分布式系统如何寻址?
  29. 分布式Trace :横跨几十个分布式组件的慢请求要如何排查?
  30. 负载均衡:怎样提升系统的横向扩展能力?
  31. A P I 网关:系统的门面要如何做呢?
  32. 多机房部署:跨地域的分布式系统如何做?
  33. Service Mesh:如何屏蔽服务化系统的服务治理细节?
  34. 给系统加上眼睛:服务端监控要怎么做?
  35. 应用性能管理:用户的使用体验应该如何监控?
  36. 压力测试:怎样设计全链路压力测试平台?
  37. 配置管理:成千上万的配置项要如何管理?
  38. 降级熔断:如何屏蔽非核心系统故障的影响?
  39. 流量控制:高并发系统中我们如何操纵流量?
  40. 面试现场第三期:你要如何准备—场技术面试呢?
  41. 计数系统设计(一):面对海量数据的计数器要如何做
  42. 计数系统设计(二):50万 Q PS下如何设计未读数系统
  43. 信息流设计(一):通用信息流系统的推理模式要如何做
  44. 信息流设计(二):通用信息流系统的拉模式要如何做
  45. 高并发下如何发现和排查问题?
  46. 我们如何准备抵抗流量峰值?

答案解析原件(如下图,内容过多近400页的高并发系统设计文档,无法一一将答案上传,但皆可分享原件给感兴趣想学习的你,私信@追逐仰望星空口令【高级】即可)

面试突击MySQL:高并发情况下,数据库该如何设计?

高并发系统设计

此外,怎么肝下MySQL?

想肝MySQL说难也还行吧,不说别的,我准备了167道超高频的MySQL面试问题(附解析,包含从基础-索引-锁-日志-调优等内容),想做Java高级程序员乃至Java架构师,想拿阿里P7-P8的offer,先将下面这些内容装进脑子里吧!

面试突击MySQL:高并发情况下,数据库该如何设计?

MySQL

答案解析原件(如下图,内容过多64页的167道超高频的MySQL面试文档,无法一一将答案上传,但已整理如下的文档)

面试突击MySQL:高并发情况下,数据库该如何设计?

MySQL

为了迈向高级程序员,那么这份 MySQL高级知识笔记手写文档(12章节内容) 同样不可错过!!

  1. MySql重要性质
  2. MySQL安装
  3. Mysql权限
  4. MySql数据类型
  5. Mysql架构
  6. 存储引擎
  7. 事务
  8. 业务设计
  9. 慢查询
  10. 索引与执行计划
  11. SQL优化
面试突击MySQL:高并发情况下,数据库该如何设计?

 


面试突击MySQL:高并发情况下,数据库该如何设计?

 


面试突击MySQL:高并发情况下,数据库该如何设计?

 

面试突击MySQL,哪怕涉及高并发系统设计的内容,千万不要慌张!沉着!冷静!



Tags:MySQL   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  Tags: MySQL  点击:(6)  评论:(0)  加入收藏
一、为什么要搭建主从架构呢1.数据安全,可以进行数据的备份。2.读写分离,大部分的业务系统来说都是读数据多,写数据少,当访问压力过大时,可以把读请求给到从服务器。从而缓解数据...【详细内容】
2021-12-15  Tags: MySQL  点击:(10)  评论:(0)  加入收藏
生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章...【详细内容】
2021-12-14  Tags: MySQL  点击:(17)  评论:(0)  加入收藏
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二...【详细内容】
2021-12-14  Tags: MySQL  点击:(13)  评论:(0)  加入收藏
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查...【详细内容】
2021-12-09  Tags: MySQL  点击:(15)  评论:(0)  加入收藏
测试的目的和原因,公司有很多程序员,每个程序员对数据库和表结构都有自己的理解。而且每个程序员的理解往往是以效率考虑。既然都是为了效率考虑,那么我就来测试一下究竟哪种使...【详细内容】
2021-12-08  Tags: MySQL  点击:(14)  评论:(0)  加入收藏
当你们考虑项目并发的时候,我在部署环境,当你们在纠结使用ArrayList还是LinkedArrayList的时候,我还是在部署环境。所以啊,技术不止境,我在部环境。今天这篇文章缕一下在同一台服...【详细内容】
2021-12-08  Tags: MySQL  点击:(16)  评论:(0)  加入收藏
对于数据分析来说,MySQL使用最多的是查询,比如对数据进行排序、分组、去重、汇总及字符串匹配等,如果查询的数据涉及多个表,还需要要对表进行连接,本文就来说说MySQL中常用的查询...【详细内容】
2021-12-06  Tags: MySQL  点击:(19)  评论:(0)  加入收藏
在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。...【详细内容】
2021-11-24  Tags: MySQL  点击:(23)  评论:(0)  加入收藏
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域...【详细内容】
2021-11-05  Tags: MySQL  点击:(31)  评论:(0)  加入收藏
▌简易百科推荐
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  爱可生    Tags:MySQL   点击:(6)  评论:(0)  加入收藏
生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章...【详细内容】
2021-12-14  python数据分析    Tags:MySQL记录锁   点击:(17)  评论:(0)  加入收藏
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二...【详细内容】
2021-12-14  linux上的码农    Tags:mysql   点击:(13)  评论:(0)  加入收藏
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查...【详细内容】
2021-12-09  元宇宙iwemeta    Tags:mysql   点击:(15)  评论:(0)  加入收藏
测试的目的和原因,公司有很多程序员,每个程序员对数据库和表结构都有自己的理解。而且每个程序员的理解往往是以效率考虑。既然都是为了效率考虑,那么我就来测试一下究竟哪种使...【详细内容】
2021-12-08  吴彬的分享    Tags:Mysql数据库   点击:(14)  评论:(0)  加入收藏
当你们考虑项目并发的时候,我在部署环境,当你们在纠结使用ArrayList还是LinkedArrayList的时候,我还是在部署环境。所以啊,技术不止境,我在部环境。今天这篇文章缕一下在同一台服...【详细内容】
2021-12-08  秃头码哥    Tags:MySQL数据库   点击:(16)  评论:(0)  加入收藏
对于数据分析来说,MySQL使用最多的是查询,比如对数据进行排序、分组、去重、汇总及字符串匹配等,如果查询的数据涉及多个表,还需要要对表进行连接,本文就来说说MySQL中常用的查询...【详细内容】
2021-12-06  笨鸟学数据分析    Tags:MySQL   点击:(19)  评论:(0)  加入收藏
在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。...【详细内容】
2021-11-24  笨鸟学数据分析    Tags:SQL语句   点击:(23)  评论:(0)  加入收藏
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域...【详细内容】
2021-11-05  Java云海    Tags:分布式锁   点击:(31)  评论:(0)  加入收藏
MySQL的进阶查询 一、 按关键字排序 使用ORDERBY语句来实现排序排序可针对一个或多个字段ASC:升序,默认排序方式 【升序是从小到大】DESC:降序 【降序是从大到小】ORDER BY的...【详细内容】
2021-11-05  Java热点    Tags:SQL语句   点击:(27)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条