国外主题网站,北京金山办公软件有限公司,电子商务网站经营特色分析的主要内容包括,百中搜分析回答
什么是分库分表#xff1f;
分库#xff1a;从单个数据库拆分成多个数据库的过程#xff0c;将数据散落在多个数据库中。分表#xff1a;从单张表拆分成多张表的过程#xff0c;将数据散落在多张表内。
为什么要分库分表#xff1f;
主要为了提升性能、…分析回答
什么是分库分表
分库从单个数据库拆分成多个数据库的过程将数据散落在多个数据库中。分表从单张表拆分成多张表的过程将数据散落在多张表内。
为什么要分库分表
主要为了提升性能、增加可用性。
分库分表前分库分表后并发支撑情况MySQL 单机部署扛不住高并发MySQL从单机到多机能承受的并发增加了多倍磁盘使用情况MySQL 单机磁盘容量几乎撑满拆分为多个库数据库服务器磁盘使用率大大降低SQL 执行性能单表数据量太大SQL 越跑越慢单表数据量减少SQL 执行效率明显提升
从性能上看
随着单库中的数据量越来越大、数据库的查询QPS越来越高相应的对数据库的读写所需要的时间也越来越多。数据库的读写性能可能会成为业务发展的瓶颈。对应的就需要做数据库性能方面的优化。
如果数据库的查询QPS过高就需要考虑拆库通过分库来分担单个数据库的连接压力。比如如果查询QPS为3500假设单库可以支撑1000个连接数的话那么就可以考虑拆分成4个库来分散查询连接压力。
如果单表数据量过大当数据量超过一定量级后无论是对于数据查询还是数据更新在经过索引优化等纯数据库层面的传统优化手段之后还是可能存在性能问题。这是量变产生了质变这时候就需要去换个思路来解决问题比如从数据生产源头、数据处理源头来解决问题既然数据量很大那我们就来个分而治之化整为零。这就产生了分表把数据按照一定的规则拆分成多张表来解决单表环境下无法解决的存取性能问题。
从可用性上看
单个数据库如果发生意外很可能会丢失所有数据。尤其是云时代很多数据库都跑在虚拟机上如果虚拟机/宿主机发生意外则可能造成无法挽回的损失。因此除了传统的 Master-Slave、Master-Master 等部署层面解决可靠性问题外我们也可以考虑从数据拆分层面解决此问题。
此处我们以数据库宕机为例
单库部署情况下如果数据库宕机那么故障影响就是100%而且恢复可能耗时很长。如果我们拆分成2个库分别部署在不同的机器上此时其中1个库宕机那么故障影响就是50%还有50%的数据可以继续服务。如果我们拆分成4个库分别部署在不同的机器上此时其中1个库宕机那么故障影响就是25%还有75%的数据可以继续服务恢复耗时也会很短。
当然我们也不能无限制的拆库这也是牺牲存储资源来提升性能、可用性的方式毕竟资源总是有限的。
反思扩展
如何分库分表 喵呜面试助手一站式解决面试问题你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] - 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享