- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
分库分表
01基本问题02一般解决思路03主要中间件Sharding-jdbc04总结MycatDBProxyMysql-proxy分库分表的方式分库分表带来的问题
01章节一PART1基本问题
1、什么是分库分表??顾名思义,即把存于一个数据库的数据分散到多个数据库中,把存于一个数据表的数据分散到多个数据表中。?2.什么情况下需要分库分表??*当一个数据库被创建之后,随着时间的推移和业务量的增加,数据库中的数据记录会越来越多,就有可能会出现两种弊端:(1)数据库的存储资源是有限的,其负载能力也是有限的,数据的大量积累导致其处理数据的能力下降;(2)数据量越多,对数据的增删改查等操作的开销也会越来越大当出现如上情况,比如用户表数据记录超千万级,对于用户的登录、验权、信息查询都会变得非常耗时,严重降低应用系统的响应性能。这个时候,技术人员就要想办法解决应用系统的响应性能问题,近几年来,技术人员通常想到并提起的就是分库分表基本问题
2.什么情况下需要分库分表??*互联网公司的应用会遭遇高并发问题:一个新兴公司,刚开始时,注册用户就40W,日活跃1W,这种情况一般的一台服务器就可以搞定;当注册用户达100W,日活跃10W,公司就需要增设服务器了,这时用2到3台应用服务器做负载均衡,数据库服务器用高配服务器,依然可以应付;当注册用户达1000W,日活跃100W,公司就需要搭建应用服务器集群了,应用服务器可以通过虚拟机、容器开设成百上千个服务并做负载均衡,不会成为性能瓶颈;然而数据库已绝不是单台服务器能应付得来的。当出现如上情况,技术人员就要想办法解决数据库的瓶颈问题,数据库与应用服务不一样,应用服务可开设成百上千个相同的实例,但数据库不行,数据库存储的数据是变化的、要保证每个应用服务访问的数据是最新且一致的,无法使用与应用服务相同的弹性扩容技术。这个时候,技术人员通常想到并提起的也是分库分表,及读写分离基本问题
02章节二PART2一般解决思路
对于大规模系统的数据库瓶颈问题,分库分表、读写分离是近年来的一般解决思路。分库分表是将原本存在于一个数据库内的数据,分拆成多个库,或者将原本属于一个表的数据分拆成多个表,并将之分散存储到不同的数据库服务器上,通过分担负载的方式提高数据库服务的响应性能。读写分离是将数据写操作只限定到一个主数据库,通过数据复制、同步分发出多个只读数据库,通过部署多个只读数据库进行数据读操作的负载均衡。分库分表的方式:垂直分表、垂直分库、水平分表、水平分库分表?一般解决思路
垂直分表垂直分表在日常开发和设计中比较常见,通俗的说法叫做“大表拆小表”,拆分是基于关系型数据库中的“列”(字段)进行的。通常情况,某个表中的字段比较多,可以新建立一张“扩展表”,将不经常使用或者长度较大的字段拆分出去放到“扩展表”中。一般解决思路在字段很多的情况下,表拆分开有时更便于开发和维护,某种意义上也能避免“跨页”的问题(MySQL、MSSQL底层都是通过“数据页”来存储的,“跨页”问题可能会造成额外的性能开销)。单表字段数最好不要超过40个。垂直分表最好(一般也能预计到)在系统设计阶段就设计好,后期维护拆分成本是很大的。
垂直分库垂直分库在“微服务”盛行的今天已经比较普及了。基本的思路就是按照业务模块来划分出不同的数据库,而不是像早期一样将所有的数据表都放到同一个数据库中。一般解决思路互联网应用中,数据库往往最容易成为系统的瓶颈,而数据库本身属于“有状态”的,相对于Web和应用服务器来讲,是比较难实现“横向扩展”的。数据库的连接资源比较宝贵且单机处理能力也有限,在高并发场景下,垂直分库一定程度上能够突破IO、连接数及单机硬件资源的瓶颈,是大型分布式系统中优化数据库架构的重要手段。当然,拆分后也会遇到很多问题,例如跨库join、分布式事务。
水平分表水平分表也称为横向分表,就是将表中不同的数据行按照一定规律分布到不同的数据表中(这些表在同一个数据库中),以此来降低单表数据量,优化查询性能。最常见的方式就是通过主键或者时间等字段进行Hash和取模后拆分一般解决思路水平分表,能够降低单表的数据量,一定程度上可以缓解查询性能瓶颈。但本质上这些表还保存在同一个库中,所以库级别还是会有IO瓶颈,带来的性能改善有限。
水平分库分表水平分库分表与水平分表的思想大体相近,不同的就是将拆分出来的表保存到不同的数据库中。这也是很多大型互联网公司所选择的做法。一般解决思路某种
文档评论(0)