数据库的分库分表
2021/7/27 19:09:48
本文主要是介绍数据库的分库分表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
分库分表是为了解决由于数据量过大导致数据库性能降低的问题,将原来独立的数据库拆分为若干数据库组成,将原来数据大表拆分为若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到数据库性能提升的目的
一般来说,数据量与访问量不是很大的情况下,先考虑缓存、读写分离、索引技术等方案。若数据量极大,且持续增长,再考虑分库分表等方案
1. 水平分库
- 把同一个表的数据按照一定规则拆分到不同的数据库中去,然后将不同的库放到不同的服务器上去。
- 比如,将id为单数的与id为双数的数据分别存放到两个库中去。
- 优点
- 解决了单库大数据,高并发的性能瓶颈
- 提高了系统的稳定性和可用性(稳定性体现在IO冲突减少,锁定减少,可用性指某个库出现问题,其他库还可用)
- 缺点
- 由于同一个表被分配到不同的数据库,需要额外进行数据操作的路由工作,因此提高了系统复杂度
2. 垂直分库
- 按照业务逻辑将表进行分类,分布到不同的数据库上面。每个库放在不同的服务器上,即专库专用
- 优点
- 解决业务层的耦合,业务清晰
- 能对不同业务的数据进行分级管理、维护、监控、扩展等
- 高并发下,垂直分库一定程度提升IO,数据库连接数。降低单机硬件资源的瓶颈
- 缺点
- 还是没有解决单表数据量过大的问题。
3. 水平分表
- 水平分表在同一个数据库内,把同一个数据表按照一定规则拆分成多个表(字段不变,改变数据量)
- 优点
- 优化单一表数据量过大而产生的性能问题
- 避免IO争抢并减少锁表的概率
- 表数据量变小,提高了检索性能
- 缺点
- 小幅度性能提升,仅仅是水平分库的一个补充优化
4. 垂直分表
- 将一个表按照字段分成多个表,每个表存储其中一部分字段
- 优点
- 避免IO争抢并加锁锁表的几率,拆分的多个表之间查询互不影响
- 如将热门数据列与非热门数据列拆分成不同表,则充分发挥热门数据的操作效率,对热门数据的操作的高效率不会被非热门数据列的低效率所拖累
- 垂直拆分原则
- 把不常用的字段单独放到一张表
- 把text,blob等大字段拆分出来放在附表中(大字段IO效率低,首先由于数据量本身大,需要更长的读取时间,其次是跨页,需要多次查询和定位操作。)
- 将经常组合查询的列放到一张表中。
这篇关于数据库的分库分表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南