数据库的分库分表

2021/7/27 19:09:48

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

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

一般来说,数据量与访问量不是很大的情况下,先考虑缓存、读写分离、索引技术等方案。若数据量极大,且持续增长,再考虑分库分表等方案

1. 水平分库

  • 把同一个表的数据按照一定规则拆分到不同的数据库中去,然后将不同的库放到不同的服务器上去。
  • 比如,将id为单数的与id为双数的数据分别存放到两个库中去。
  • 优点
    • 解决了单库大数据,高并发的性能瓶颈
    • 提高了系统的稳定性和可用性(稳定性体现在IO冲突减少,锁定减少,可用性指某个库出现问题,其他库还可用)
  • 缺点
    • 由于同一个表被分配到不同的数据库,需要额外进行数据操作的路由工作,因此提高了系统复杂度

2. 垂直分库

  • 按照业务逻辑将表进行分类,分布到不同的数据库上面。每个库放在不同的服务器上,即专库专用
  • 优点
    • 解决业务层的耦合,业务清晰
    • 能对不同业务的数据进行分级管理、维护、监控、扩展等
    • 高并发下,垂直分库一定程度提升IO,数据库连接数。降低单机硬件资源的瓶颈
  • 缺点
    • 还是没有解决单表数据量过大的问题。

3. 水平分表

  • 水平分表在同一个数据库内,把同一个数据表按照一定规则拆分成多个表(字段不变,改变数据量)
  • 优点
    • 优化单一表数据量过大而产生的性能问题
    • 避免IO争抢并减少锁表的概率
    • 表数据量变小,提高了检索性能
  • 缺点
    • 小幅度性能提升,仅仅是水平分库的一个补充优化

4. 垂直分表

  • 将一个表按照字段分成多个表,每个表存储其中一部分字段
  • 优点
    • 避免IO争抢并加锁锁表的几率,拆分的多个表之间查询互不影响
    • 如将热门数据列与非热门数据列拆分成不同表,则充分发挥热门数据的操作效率,对热门数据的操作的高效率不会被非热门数据列的低效率所拖累
  • 垂直拆分原则
    • 把不常用的字段单独放到一张表
    • 把text,blob等大字段拆分出来放在附表中(大字段IO效率低,首先由于数据量本身大,需要更长的读取时间,其次是跨页,需要多次查询和定位操作。)
    • 将经常组合查询的列放到一张表中。



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


扫一扫关注最新编程教程