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

分库分表浅析

简介

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

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

什么是分库分表

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

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

在这里插入图片描述

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

为什么分库分表

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

如何分库分表

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

1. 垂直分库分表

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

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

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

二、垂直分表

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

在这里插入图片描述

2. 水平分库分表

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

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

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

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

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

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

相关文章:

分库分表浅析

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

java 宠物医院系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 宠物医院系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…...

XMall 开源商城 SQL注入漏洞复现(CVE-2024-24112)

0x01 产品简介 XMall 开源电商商城 是开发者Exrick的一款基于SOA架构的分布式电商购物商城 前后端分离 前台商城:Vue全家桶 后台管理:Dubbo/SSM/Elasticsearch/Redis/MySQL/ActiveMQ/Shiro/Zookeeper等。 0x02 漏洞概述 XMall 开源商城 /item/list、/item/listSearch、/sys/…...

Docker原理及概念相关

Docker最核心的组件 image:镜像,构建容器,也可以通过Dockerfile文本描述镜像的内容。 (我们将应用程序运行所需的环境,打包为镜像文件) Container:容器 (你的应用程序,就跑在容器中 ) 镜像仓库(dockerhub)(…...

Vim相关配置

记录一下有关vim的一些设置,以免电脑寄了不好重新配置 vscodevim 首先是vscode中的vim模式 在应用商店中搜索vim插件安装即可 然后在setting中添加以下有关vim 的配置 "vim.easymotion": true,"vim.surround": true,"vim.incsearch"…...

ARMv8-AArch64 的异常处理模型详解之异常处理详解(进入异常以及异常路由)

在上篇文章 ARMv8-AArch64 的异常处理模型详解之异常处理概述Handling exceptions中,作者对异常处理整体流程以及相关概念做了梳理。接下来,本文将详细介绍处理器在获取异常、异常处理以及异常返回等过程中都做了哪些工作。 ARMv8-AArch64 的异常处理模型…...

unity学习(19)——客户端与服务器合力完成注册功能(1)入门准备

逆向服务器用了三天的时间,但此时觉得一切都值,又可以继续学习了。 服务器中登录请求和注册请求由command变量进行区分,上一层的type变量都是login。 public void process(Session session, SocketModel model) {switch (model.Command){ca…...

论文精读--对比学习论文综述

InstDisc 提出了个体判别任务,而且利用这个代理任务与NCE Loss去做对比学习从而得到了不错的无监督表征学习的结果;同时提出了别的数据结构——Memory Bank来存储大量负样本;解决如何对特征进行动量式的更新 翻译: 有监督学习的…...

文章复现 | 差异分析和PPI网络构建

原文链接:差异分析和PPI网路图绘制教程 写在前面 在原文中,作者获得285个DEG,在此推文中共获得601个DEG。小杜的猜想是标准化的水段不同的原因吧,或是其他的原因。此外,惊奇的发现发表医学类的文章在附件中都不提供相…...

入门级10寸加固行业平板—EM-I10J

亿道信息以其坚固耐用的智能终端设备而闻名,近日发布了一款理想入门级 10 英寸加固平板电脑—I10J。 EM-I10J​​ 这是一款 10 英寸的平板电脑,主要运行 Windows 10操作系统,带有硬化塑料外壳,具有 IP65 防水防尘功能和 MIL-STD 8…...

gem5 garnet 合成流量: packet注入流程

代码流程 下图就是全部. 剩下文字部分是细节补充,但是内容不变: bash调用python,用python配置好configuration, 一个cpu每个tick运行一次,requestport发出pkt. bash 启动 python文件并配置 ./build/NULL/gem5.debug configs/example/garnet_synth_traffic.py \--num-cpus…...

java实现排序算法(上)

排序算法 冒泡排序 时间和空间复杂度 要点 每轮冒泡不断地比较比较相邻的两个元素,如果它们是逆序的,则需要交换它们的位置下一轮冒泡,可以调整未排序的右边界,减少不必要比较 代码 public static int[] test(int[] array) {// 外层循环控制遍历次数for (int i 0; i <…...

「算法」滑动窗口

前言 算法需要多刷题积累经验&#xff0c;所以我行文重心在于分析解题思路&#xff0c;理论知识部分会相对简略一些 正文 滑动窗口属于双指针&#xff0c;这两个指针是同向前行&#xff0c;它们所夹的区间就称为“窗口” 啥时候用滑动窗口&#xff1f; 题目涉及到“子序列…...

Windows11(非WSL)安装Installing llama-cpp-python with GPU Support

直接安装&#xff0c;只支持CPU。想支持GPU&#xff0c;麻烦一些。 1. 安装CUDA Toolkit (NVIDIA CUDA Toolkit (available at https://developer.nvidia.com/cuda-downloads) 2. 安装如下物件&#xff1a; gitpythoncmakeVisual Studio Community (make sure you install t…...

rtt设备io框架面向对象学习-脉冲编码器设备

目录 1.脉冲编码器设备基类2.脉冲编码器设备基类的子类3.初始化/构造流程3.1设备驱动层3.2 设备驱动框架层3.3 设备io管理层 4.总结5.使用 1.脉冲编码器设备基类 此层处于设备驱动框架层。也是抽象类。 在/ components / drivers / include / drivers 下的pulse_encoder.h定义…...

华为OD机试真题- 攀登者2-2024年OD统一考试(C卷)

题目描述: 攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。地图表示为一维数组,数组的索引代表水平位置,数组的高度代表相对海拔高度。其中数组元素0代表地面。例如[0,1,4,3,1,0,0,1,2,3,1,2,1,0], 代表如下图所示的地图,地图中有两个山脉位置分别为 1,2,3,4,5和8,9,1…...

19.Qt 组合框的实现和应用

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 1. 界面 2.槽 3.样式表 参考&#xff1a; 前言&#xff1a; 学习QCombox控件的使用 技能&#xff1a; 简单实现组合框效果 内容&#xff1a; 1. 界面 在ui编辑界面找到input widget里面的comboBox&#xff…...

【Linux】进程地址空间的理解

进程地址空间的理解 一&#xff0c;什么是程序地址空间二&#xff0c;页表和虚拟地址空间三&#xff0c;为什么要有进程地址空间 一&#xff0c;什么是程序地址空间 在我们写程序时&#xff0c;都会有这样下面的内存结构&#xff0c;来存放变量和代码等数据。 一个进程要执行…...

【Jvm】类加载机制(Class Loading Mechanism)原理及应用场景

文章目录 Jvm基本组成一.什么是JVM类的加载二.类的生命周期阶段1&#xff1a;加载阶段2&#xff1a;验证阶段3&#xff1a;准备阶段4&#xff1a;解析阶段5&#xff1a;初始化 三.类初始化时机四.类加载器1.引导类加载器&#xff08;Bootstrap Class Loader&#xff09;2.拓展类…...

Spring AOP的实现方式

AOP基本概念 Spring框架的两大核心&#xff1a;IoC和AOP AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程&#xff09; AOP是一种思想&#xff0c;是对某一类事情的集中处理 面向切面编程&#xff1a;切面就是指某一类特定的问题&#xff0c;所以AOP可…...

基于HPM5E00的EtherCAT从站开发板全流程实战:从硬件设计到软件配置

1. 项目概述&#xff1a;为什么我们要自己动手做一块EtherCAT开发板&#xff1f;如果你是一名从事工业自动化、运动控制或者机器人开发的工程师&#xff0c;最近几年一定没少听到EtherCAT的大名。它号称“以太网控制自动化技术”&#xff0c;本质上是一种基于标准以太网的实时工…...

Beyond Compare 5终极激活指南:3分钟获取永久授权密钥

Beyond Compare 5终极激活指南&#xff1a;3分钟获取永久授权密钥 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 你是否还在为Beyond Compare 5的30天试用期到期而烦恼&#xff1f;每次打开软件…...

【亲测免费】 工业自动化+Modbus通讯协议+libmodbus开源库+Windows x64编译教程

工业自动化Modbus通讯协议libmodbus开源库Windows x64编译教程 【下载地址】工业自动化Modbus通讯协议libmodbus开源库Windowsx64编译教程 本资源适用于使用libmodbus开源库进行数据通信过程中的环境搭建过程。由于最新版本的libmodbus并不能通过官网提供的教程实现Windows下的…...

uni-app项目里遇到‘get’ of undefined?别慌,可能是Vue3条件编译惹的祸

uni-app开发中"get of undefined"错误深度解析&#xff1a;Vue3条件编译的隐秘陷阱 1. 错误现象背后的真相 当你在uni-app项目中看到控制台抛出Cannot read property get of undefined时&#xff0c;这种看似简单的类型错误往往隐藏着更深层的框架适配问题。不同于常…...

Pydantic序列化避坑大全:从‘按声明类型序列化’到灵活exclude/include的5个常见误区

Pydantic序列化深度避坑指南&#xff1a;从类型陷阱到安全控制的实战解析 深夜调试代码时&#xff0c;你是否遇到过这样的场景&#xff1a;明明在内存中完整的对象&#xff0c;通过API返回给前端时却莫名丢失了关键字段&#xff1f;或者当你在日志中打印包含敏感信息的模型时&a…...

LeaguePrank终极指南:3分钟掌握英雄联盟个人信息自定义

LeaguePrank终极指南&#xff1a;3分钟掌握英雄联盟个人信息自定义 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 你是否厌倦了英雄联盟中千篇一律的个人资料展示&#xff1f;想要在召唤师峡谷中展示独特的自我形象&#xff…...

SteamVR Unity插件实战:解决VR开发中的三大核心挑战

SteamVR Unity插件实战&#xff1a;解决VR开发中的三大核心挑战 【免费下载链接】steamvr_unity_plugin SteamVR Unity Plugin - Documentation at: https://valvesoftware.github.io/steamvr_unity_plugin/ 项目地址: https://gitcode.com/gh_mirrors/st/steamvr_unity_plug…...

手把手教你用ADS 2023设计433MHz低噪放大器(从DC分析到S参数,保姆级避坑指南)

从零开始用ADS 2023打造433MHz低噪声放大器&#xff1a;原理剖析与实战避坑指南 在物联网和无线通信设备爆发式增长的今天&#xff0c;433MHz频段因其良好的穿透性和适中的传输距离&#xff0c;成为智能家居、远程控制等场景的首选。而作为接收机前端的关键部件&#xff0c;低噪…...

AI行业的“隐形赛道”:AI伦理与合规人才缺口到底有多大

一、AI狂飙下的“隐形刚需”&#xff1a;被忽视的伦理与合规赛道当软件测试从业者还在为功能测试、性能测试的技术迭代焦头烂额时&#xff0c;AI行业的另一股暗流正汹涌袭来——伦理与合规人才的缺口&#xff0c;正成为制约AI产业可持续发展的隐形瓶颈。从ChatGPT引发生成式AI热…...

Cortex-M中断优先级配置与优化实践

1. 中断处理机制基础解析在嵌入式系统开发中&#xff0c;中断处理是最核心的机制之一。Cortex-M系列处理器采用嵌套向量中断控制器(NVIC)来管理中断优先级&#xff0c;其设计哲学是允许高优先级中断打断低优先级中断的执行&#xff0c;形成中断嵌套。这种机制确保了关键任务能够…...