当前位置: 首页 > news >正文

分库分表浅析

简介

对于任何系统而言,都会设计到数据库随着时间增长而累积越来越多的数据,系统也因为越来越多的需求变迁导致原有的设计不再满足现状,为了解决这些问题,分库分表就会走进视野,带着几个问题走入分库分表。

  1. 什么是分库分表
  2. 为什么要分库分表
  3. 怎样分库分表
  4. 分库分表后如何处理事务问题

什么是分库分表

分库分表是一种技术方案,为了解决单机数据块随着时间增长,数据量越来越大引起的数据库性能逐渐下滑。

在上述定义中,分库分表主要是为了解决数据库性能下降产生的一种技术方案。

在这里插入图片描述

引起数据库性能下降的原因有很多,但不一定都需要通过分库分表来解决。分库分表主要是为了解决单机数据量过大。

为什么分库分表

根据上述介绍,当数据量过大时,单机数据库无法进一步优化,只能通过分库分表方案来分散数据。
如果是其他原因,是可以通过优化手段来解决的,比如索引失效,可以通过合理索引的创建来提升数据库性能。只有数据量不断增大时,所有手段都已经用了,也无法进一步优化,这时只能通过分库分表来解决。

如何分库分表

分库和分表是两个维度的方案,库由表组成,表的粒度比库更小,它们都涉及到拆分。
表是一个由行和列构成的二维结构,因此拆分时可以分为列拆分和行拆分,它们也叫做垂直拆分和水平拆分。

1. 垂直分库分表

垂直拆分的原理和单体系统拆分为微服务同理

1. 按业务垂直拆分。将业务按照一定的粒度划分,然后将相同业务范围的数据拆分到一起,形成内聚。
2. 按字段使用频率拆分,将高频字段和低频字段拆分。
3. 按字段读写频率拆分
4. 等等

一、垂直分库
垂直分库是按较大粒度进行业务拆分,将原有的单体库拆分多个业务板块的数据库。
在这里插入图片描述

二、垂直分表

垂直分表,则是将原有的单表,按列拆分为多个表。其拆分原则也是按业务拆分,将原有的大表拆分为几个小表。

在这里插入图片描述

2. 水平分库分表

数据库的数据由行组成,水平分库分表则是按数据量拆分。将原有的大库或大表拆分为多个子库或子表。

在这里插入图片描述
如何让数据存入不同的子表?

1. 分散存储, 让数据循环存入子表A、B、C
2. 范围存储, 分段类似0-1000万存A表,1000万-2000万存B表。

分库分表后如何处理事务问题

无论水平拆分,还是垂直拆分,都会涉及到分布式事务问题。

分布式事务目前的解决方案主要是阿里巴巴开源的Seata分布式事务中间件。

http://www.lryc.cn/news/301891.html

相关文章:

  • java 宠物医院系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目
  • XMall 开源商城 SQL注入漏洞复现(CVE-2024-24112)
  • Docker原理及概念相关
  • Vim相关配置
  • ARMv8-AArch64 的异常处理模型详解之异常处理详解(进入异常以及异常路由)
  • unity学习(19)——客户端与服务器合力完成注册功能(1)入门准备
  • 论文精读--对比学习论文综述
  • 文章复现 | 差异分析和PPI网络构建
  • 入门级10寸加固行业平板—EM-I10J
  • gem5 garnet 合成流量: packet注入流程
  • java实现排序算法(上)
  • 「算法」滑动窗口
  • Windows11(非WSL)安装Installing llama-cpp-python with GPU Support
  • rtt设备io框架面向对象学习-脉冲编码器设备
  • 华为OD机试真题- 攀登者2-2024年OD统一考试(C卷)
  • 19.Qt 组合框的实现和应用
  • 【Linux】进程地址空间的理解
  • 【Jvm】类加载机制(Class Loading Mechanism)原理及应用场景
  • Spring AOP的实现方式
  • Linux------环境变量
  • 计算机视觉所需要的数学基础
  • ChatGPT魔法1: 背后的原理
  • 【c/c++】获取时间
  • uniapp富文本文字长按选中(用于复制,兼容H5、APP、小程序三端)
  • 常见的几种Web安全问题测试简介
  • linux信号机制[一]
  • elementui 中el-date-picker 选择年后输出的是Wed Jan 01 2025 00:00:00 GMT+0800 (中国标准时间)
  • Redis 集群(Cluster)
  • 260.【华为OD机试真题】信道分配(贪心算法-JavaPythonC++JS实现)
  • Python打发无聊时光:3.实现简单电路的仿真