分库与分表

数据库分库与分表

简介

​ 就是将原本存储在一个库的数据分块存储在多个库上,将原本存储在一个表的数据分块存储在多个表里面

切分模式

​ 数据的切分根据其切分规则的类型,可以分为如下两种切分模式

垂直(纵向)切分

​ 把单一的表拆分成多个表,并分散到不同的数据库(主机)上,即将一个表中的字段进行分割出来,形成多张表存储数据

优点:

  • 拆分后业务清晰,拆分规则明确
  • 系统之间进行整合或扩展很容易
  • 按照不同的类型将表放到不同的机器上便于管理
  • 便于实现动静分离、冷热分离的数据库表的设计模式
  • 数据维护简单

缺点

  • 业务表多变,SQL语句复杂
水平(横向)切分

​ 根据表中数据的逻辑关系,将统一表中的数据按照某种条件拆分到多台数据库上,并非是将表进行切分,而是将其按照某个字段的某种规则分散到多个库中,在表中的包含一部分数据,所有表加起来就是整个数据。

​ 我们通常将数据分配的原则称为分片规则,常见的分片规则有对用户的id取模。

注意我们选择分片规则的时候,尽量选择一些不会变动的值,如果值修改了我们就要把数据移动到相应的数据库中,这样就比较麻烦

优点:

  • 单库单表的数据保持在一定的量级,有利于性能的提高
  • 切分的表结构相同,应用层改动较少,只需要增加路由规则即可
  • 提高了系统的稳定性和负载能力

缺点:

  • 切分后,数据分散,很难利用数据库join操作,跨库join性能较差
  • 切分规则难以抽象
  • 切片事务的一致性难以解决
  • 数据扩容的难度和维护量很大

为什么要分库分表

​ 数据库负载增大时的操作,随着用户量增加,访问量也随之提高,当提高到一定的量级的时候,应用也会缓慢。虽然可以通过增大前端应用负载的方式来提升速度,但数据库是存在性能瓶颈的

常见的中间件

MyCat

​ 使用mycat时不需要改代码,我们在使用的时候,如果有多个库,我们在代码里只需要写mycat对外的一个逻辑库信息即可,而数据库层面的配置,都在mycat的配置信息中,

Sharding JDBC

​ 是一个jar包,,使用sharding-jdbc时需要修改代码。我们在使用的时候,需要引入sharding jdbc的jar包,在配置文件里面写明总共有多少个库,每个库里面的表,每个表的分片规则等信息。

最后

  • 如果觉得看完有收获,希望能给我点个赞,这将会是我更新的最大动力,感谢各位的支持
  • 欢迎各位关注我的公众号【java冢狐】,专注于java和计算机基础知识,保证让你看完有所收获,不信你打我
  • 如果看完有不同的意见或者建议,欢迎多多评论一起交流。感谢各位的支持以及厚爱。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章