数据库分库分表

2021/10/2 19:10:57

本文主要是介绍数据库分库分表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

数据库分库分表

  • 1.垂直拆分(拆分的是字段)
    • 1.1垂直分库:
    • 1.2垂直分表:
    • 1.3优点
    • 1.4缺点
  • 2.水平拆分(拆分的是内容)
    • 2.1 一种方法:id取模2,,如果userid mod 2等于1,去一表,等于0去二表
    • 2.2优点
  • 2.3缺点
  • 3.分库分表问题
  • 4.分库分表中间件
    • 4.1proxy代理层
    • 4.2jdbc应用层

1.垂直拆分(拆分的是字段)

  • 1.每个库(表)的结构都不一样
  • 2.每个库(表)的数据(至少有一列一样)
  • 3.每个库(表)的并集是全量数据

1.1垂直分库:

  • 电商(shop)数据库可分为(orders订单库),(users)会员库,(goods商品库)。

1.2垂直分表:

  • 原表:user表(userid,name,password,sex,adress,age,niack name)
  • 分为如下两表:
  • 分表1.user_base表(userid,name,password)
  • 分表2.user_info表(userid,sex,adress,age,niack name)

1.3优点

  • 1.拆分后业务清晰(专库专用按业务拆分)
  • 2.数据维护简单,按业务不同业务放到不同机器上

1.4缺点

  • 1.如果单表的数据库压力大,读写压力大
  • 2.受某种业务决定,或者被限制,也就是说一个业务往往会影响到数据库的瓶颈(性能问题)
  • 3.部分业务无法关联join,只能通过程序接口去调用,提高了开发复杂度,

2.水平拆分(拆分的是内容)

  • 1.每个库(表)的结构都一样
  • 2.每个库(表)的数据都不一样
  • 3.每个库(表)的并集是全量数据

2.1 一种方法:id取模2,,如果userid mod 2等于1,去一表,等于0去二表

2.2优点

  • 1.单库(表)的数据保持在一定量(减少),有助于性能提高
  • 2.提高了系统的稳定性和负载能力
  • 3.切分表的结构相同

2.3缺点

  • 1.数据的扩容很有难度,维护量大
  • 2.拆分规则很难抽象出来
  • 3.分片事务的一致性问题,部分业务无法关联join,只能通过java程序接口去调用

3.分库分表问题

  • 1.ACID分布式事务(分布式事务指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。)
  • 2.维护成本高
  • 3.跨库查询问题
  • 4.分布式全局唯一id

4.分库分表中间件

4.1proxy代理层

  • mycat,atlas,mysql-proxy,shardingproxy

4.2jdbc应用层

shardingsphere(生态圈),TDDL,shardingjdbc



这篇关于数据库分库分表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程