1.为什么要分库分表?

        分布式微服务服务能力提升了,但是数据库的访问性能也变慢了,性能严重下降

        分库分表就是为了解决由于数据量过大而导致数据库性能降低问题,将原来独立的数据库拆分成若干的数据库组成;

        将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目 的

2.分库分表的方式

垂直分库、水平分库、垂直分表、水平分表

垂直分表

1.什么是垂直分表:将一个表按照字段分成多表,每个表存储其中一部分字段。

        按以下原则进行垂直拆分

  1. 把不常用的字段单独放在一张表;
  2. 把text,blob等大字段拆分出来放在附表中;
  3. 经常组合查询的列放在一张表中;

     比如:一张商品表中,有商品名称、商品价格、商品数量、商品简介、商品评价,

                商品名称、商品价格、商品数量 使用频繁,

                商品简介和商品评价 只有在点击详情才会使用到的数据,属于不频繁使用

        由于数据量本身大,需要更长的读取时间跨页时,单页内的数据行越多数据库整体性能越好,而大字段占用空间大,单页内存储行数小,因此IO效率低,我们就可以将简介和评价从表中拆分出来。

2.为什么要垂直分表:库内垂直分表只解决了单一表数据量过大的问题

                                

3.垂直分表的作用:1.避免了IO争抢,减少了锁表的几率

                             2.充分发挥热门数据的操作效率,商品信息的操作的高效率不会被商品描述的低效率所拖累

垂直分库

      

        垂直分库的核心理念是:专库专用

        1.什么是垂直分库:指按照业务将表进行分类,分布到不同的数据库上面,每个库可以放在不同的服务器上

        2.为什么要垂直分库:通过垂直分表数据库性能得到了一定程度的提升,但是还没有达到要求,并且磁盘空间也快不够了,因为数据还是始终限 制在一台服务器,库内垂直分表只解决了单一表数据量过大的问题,但没有将表分布到不同的服务器上,因此每个 表还是竞争同一个物理机的CPU、内存、网络IO、磁盘。(经过垂直分库后,数据库性能问题得到一定程度的解决 )

        3.垂直分库的作用:解决了业务层面的耦合、业务清晰

                                        能对不同业务的        数据进行分级管理、维护、监控、扩展等;

                                        高并发场景下,能在一定程度上提升IO、数据连接数、降低单机硬件资源的瓶颈

垂直分库通过将表按业务分类,然后分布在不同数据库,并且可以将这些数据库部署在不同服务器上,从而达到多 个服务器共同分摊压力的效果,但是依然没有解决单表数据量过大的问题。

水平分库

        1.什么是水平分库:把同一个表的数据按照一定规则拆到不同数据库中,每个库可以放到不同服务器上

        2.为什么要水平分库:见上

        3.  水平分库的作用:解决了单库大数据,高并发的性能瓶颈,提高了系统的稳定性和可用性 

水平分表、

         访问表名称的表达式为商品 信息[商品ID%2 + 1]

        1.什么是水平分表:在同一数据库内,将一个表的字段按照一定规则拆分到多个表中

        2.为什么要水平分表:解决单表数据量过大的问题

        3.水平分表打作用:优化单一数据量过大而产生的性能问题避免IO并减少缩表的几率,提高了检索性能