分库分表简介

什么是分库分表?

分库(表)就是将我们存放在同一个数据库(表)中的数据分散存放到多个数据库(表)上面,以达到分散单台设备负载的效果

分库分表的方式:

分库分表包括: 垂直分库、垂直分表、水平分库、水平分表 四种方式

        垂直分库:按照业务的不同进行区分,分不到不同的数据库,这些数据库可以部署到不同的服务器上面,以达到降低单个服务器压力的目的。比如一个业务里面有商品模块和用户模块,对应有商品表和用户表,则可以将商品表放在一个数据库(服务器),用户表放在另一个数据库(服务器)。

        垂直分表:将一个表按照表中字段进行拆分,分别放于多张表中。比如用户表中有用户基本身份信息相关字段和用户爱好信息相关字段,则可将用户基本信息字段抽取出来单独做一张表,用户爱好信息字段抽取出来作为另一张表。

        水平分表:根据分表规则将单表的数据分到多张表中存储。其与垂直分表不同的是垂直分表后每张表的字段不相同,而水平分表每张表的字段是一样的,只是存储的数据不一样,比如规定ID为奇数的存在表A,ID为偶数的存在表B,则ID=1的数据应存在表A,ID=2的数据应存在表B。

        水平分库:与水平分表类似,根据分库规则将单数据库的数据分到多个数据库中存储。每个数据库中数据表及表中字段都是一样的,只是存储的内容不一样。

分库分表解决的问题:

        分库分表的目的是为了解决由于数据量过大而导致数据库性能降低的问题,将原来单体服务的数据库进行拆分。将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。

什么情况下需要分库分表?

  • 单机存储容量遇到瓶颈。
  • 连接数,处理能力达到上限。

分库分表带来的问题:

事务一致性问题:当我们需要更新的内容同时分布在不同的库时,不可避免的会产生跨库的事务问题。原来在一个数据库操作,本地事务就可以进行控制,分库之后 一个请求可能要访问多个数据库,如何保证事务的一致性,目前还没有简单的解决方案。

跨节点关联问题:在分库之后,原来在一个库中的一些表,被分散到多个库,并且这些数据库可能还不在一台服务器,无法关联查询。解决这种关联查询,需要我们在代码层面进行控制,将关联查询拆开执行,然后再将获取到的结果进行拼装。

分页查询排序问题:分库并行查询时,如果用到了分页,每个库返回的结果集本身是无序的,只有将多个库中的数据先查出来,然后再根据排序字段在内存中进行排序,如果查询结果过大也是十分消耗资源的。

主键避重问题:在分库分表的环境中,表中的数据存储在不同的数据库,主键自增无法保证ID不重复,需要单独设计全局主键。

公共表问题:不同的数据库,都需要从公共表中获取数据.。可以在每一个库都创建这个公共表,所有对公共表的更新操作,都同时发送到所有分库执行。ShardingJDBC可以帮助我们解决这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值