性能优化——分库分表

1、什么是分库分表

1.1、分表

将同一个库中的一张表(比如SPU表)按某种方式(垂直拆分、水平拆分)拆分成SPU1、SPU2、SPU3、SPU4…等若干张表,如下图所示:
在这里插入图片描述

1.2、分库

在表数据不变的情况下,对数据库进行拆分,即将一个库中的若干张表按某种方式拆分出来,放到不同的数据中,如下图所示:
在这里插入图片描述

1.3、分库+分表

数据库的数量和表的数量都有变化,例如将一个数据库中的一张表(比如SPU表)拆分成SPU1、SPU2、SPU3、SPU4…等若干张表,并放到不同的数据里面,如下图所示:
在这里插入图片描述

2、拆分方式

在这里插入图片描述

2.1、水平拆分

水平拆分指的是在整个表数据结构不发生变化的前提下,我们将一张表的数据拆分成多张表,如下图所示:
在这里插入图片描述
这样拆分完以后,单张表的数据量就降下来了,读写性能自然就上去了。

2.2、垂直拆分

垂直拆分指将本来放在一张表中的字段,按业务需求拆分开放到多张表中,如下图所示:
在这里插入图片描述
这样拆分完后,就将需要经常查询的数据单独放到一张表中了,性能也就提上去了。

2、何时进行分库分表?

当系统性能出现瓶颈,我们通过代码优化、加缓存、JVM性能调优、限流、搭建集群等常用的技术手段依然无法很好的解决问题时,就可以考虑采用分库分表来提高系统的性能。常见需要进行分表分表的场景有以下几点:

2.1、单表出现性能瓶颈

单表数据量较大,导致读写性能较慢。

2.2、单库出现性能瓶颈

  1. CPU压力过大(busy、load过高),导致读写性能较慢。
  2. 内存不足(缓存池命中率较低、磁盘读写IOPS过高),导致读写性能较慢。
  3. 磁盘空间不足,导致无法正常写入数据。
  4. 网络带宽不足,导致读写性能较慢。

3、如何选择分库、分表或者分库+分表

3.1、只分表

  • 单表数据量较大,单表读写性能出现瓶颈。
  • 经过评估单库的容量和性能可以支撑未来几年的数据量增长。

3.2、只分库

  • 数据库(读)写压力较大,数据库出现存储性能瓶颈。

3.3、分库分表

  • 单表数据量较大,单表读写性能出现瓶颈。
  • 数据库(读)写压力较大,数据库出现存储性能瓶颈。

4、分库分表带来的问题

4.1、分布式唯一ID

分库分表后,一张表被拆成了多张表,数据库的自增ID无法保证数据的唯一性了,因此需要映入一种方案来保证数据ID的唯一性。成熟的解决方案有以下几个:

4.1.1、UUID

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/51689.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity3D赛车游戏】【四】在Unity中添加阿克曼转向,下压力,质心会让汽车更稳定

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

C++实现字符串的逆置

目录 C和C的区别 【1】C对C的扩充 【2】C对C的兼容 第一个C程序 【1】hello world 【2】cout标准输出流对象 i)介绍 ii)运算 iii)cout的使用 iv)使用cout指定格式的输出 练习:1、输出斐波那契的前10项。 【3】…

《Linux从练气到飞升》No.17 进程创建

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

VB超市配送运输管理系统设计与实现

摘要: 连锁经营从九十年代初进入中国市场以来,由于具有批量进货、集中配送、统一管理、统一价格的优点,表现出良好的发展势头。发展连锁业,配送中心的建设是关键。本文以我国某大型连锁超市的配送中心信息化管理为实际背景,介绍了连锁超市配送中心运输管理信息系统设计开发…

开学需要买哪些电容笔?ipad可以用的手写笔

因为iPad的功能亮眼,让iPad的用户越来越多,并且越来越受欢迎。用来画画、做笔记都很有用,但要是用来看电视、打游戏的话,使用价值就显得低了。如果你不想买一支价格不菲的苹果电容笔,或是只是想要日常用于书写记录&…

Day04-Vue基础-监听器-双向绑定-组件通信

Day04-Vue基础-监听器-双向绑定-组件通信 一 侦听器 语法一 <template><div>{{name}}<br><button @click="update1">修改1</button><

【云原生】Docker Cgroups资源控制管理

目录 一、cgroups简介 cgroups有四大功能&#xff1a; 二、cpu时间片的概念 三、对CPU使用的限制 3.1 设置CPU使用率上限 &#xff08;1&#xff09;查看容器的默认CPU使用限制 &#xff08;2&#xff09;进行压力测试 &#xff08;3&#xff09;创建容器时设置CPU使用时…

Linux下套接字TCP实现网络通信

Linux下套接字TCP实现网络通信 文章目录 Linux下套接字TCP实现网络通信1.引言2.具体实现2.1接口介绍1.socket()2.bind()3.listen()4.accept()5.connect() 2.2 服务器端server.hpp2.3服务端server.cc2.4客户端client.cc 1.引言 ​ 套接字(Socket)是计算机网络中实现网络通信的一…

Linux笔记--Ubuntu设置sftp服务

目录 1--修改配置文件 2--注销代码 3--更改代码 4--重启服务 1--修改配置文件 vim /etc/ssh/sshd_config 2--注销代码 ① 注销&#xff1a; Subsystem sftp /usr/libexec/openssh/sftp-server ② 更改为&#xff1a; Subsystem sftp internal-sftp 3--更改代码 Per…

浙大陈越何钦铭数据结构07-图6 旅游规划

题目: 有了一张自驾旅游路线图&#xff0c;你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序&#xff0c;帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的&#xff0c;那么需要输出最便宜的一条路径。 输入…

Java——面向对象编程思想

前言 如果有人问你&#xff0c;C和Java的区别是什么呢&#xff1f; 我想大部分人肯定脱口而出的是&#xff1a;C是面向过程的&#xff0c;Java是面向对象的。 那如何理解面向过程和面向对象呢&#xff1f; 首先&#xff0c;面向过程和面向对象都是编程思想。 ①面向过程&#…

【3Ds Max】可编辑多边形“边界”层级的简单使用

目录 示例 &#xff08;1&#xff09;挤出 &#xff08;2&#xff09;插入顶点 &#xff08;3&#xff09;切角 &#xff08;4&#xff09;利用所选内容创建图形 &#xff08;5&#xff09;封口 &#xff08;6&#xff09;桥 示例 这里我们首先创建一个长方体&#xff…

【Java面试】指令重排引发问题及解决方案

一 指令重排引发的问题 什么是指令重排&#xff1f; 指令重排是指在程序执行过程中&#xff0c;为了优化性能&#xff0c;编译器或处理器可能会重新安排代码指令的执行顺序&#xff0c;但要求不改变程序的最终结果。 在多线程环境中&#xff0c;指令重排可能会引发一些问题&a…

C#使用xamarin进行跨平台开发

使用 Xamarin 进行跨平台开发可以使用 C# 和 .NET 平台来开发移动应用程序&#xff0c;同时将代码在多个主要移动操作系统上运行&#xff0c;包括 Android 和 iOS。以下是在 C# 中使用 Xamarin 进行跨平台开发的一般步骤&#xff1a; 安装 Xamarin&#xff1a; 在开始之前&…

Java基础之IO流File类创建及删除

1.File类概述及构造方法 2.File类创建功能 文件创建成功&#xff01; 如果文件不存在&#xff0c;就创建文件&#xff0c;并返回true 如果文件存在&#xff0c;就不创建文件&#xff0c;并返回false 如果文件夹不存在&#xff0c;就创建文件夹&#xff0c;并返回true 如果文件…

html学习第2篇---标签(1)

html学习第2篇---标签 1、标题标签h1---h62、段落标签p3、换行标签br4、文本格式化标签5、div标签和span标签6、图像标签img6.1、图像属性6.2、相对路径、绝对路径 7、超链接标签a7.1、属性7.2、分类 8、注释标签和特殊字符8.1、注释8.2、特殊字符 1、标题标签h1—h6 为了使网…

【Unity学习笔记】DOTween(2)官方案例

本文中大部分内容学习来自DOTween官方文档 此处无法展示动图&#xff08;懒得录GIF&#xff09;&#xff0c;请下载官方案例场景自行学习 文章目录 场景1 基本补间场景2 动态补间场景3 Shader修改场景4 路径拟合运动场景5 序列播放场景6 UGUI 场景1 基本补间 案例一展示了最基…

Python操作sql,备份数据库

1、批量执行sql import pymysql# 执行批量的 SQL 语句 def executeBatchSql(cursor, sqlStatements):for sql in sqlStatements:try:cursor.execute(sql)print(Executed SQL statement:, sql)except Exception as e:print(Error executing SQL statement:, e)# 创建数据库连接…

AMBA总线协议(0)——目录与传送门

一、AMBA总线协议 Arm高级微控制器总线架构&#xff08;Advanced Microcontroller Bus Architecture&#xff0c;AMBA&#xff09;是一种开放式标准片上互联规范&#xff0c;用于连接和管理片上系统&#xff08;System on Chip,Soc&#xff09;中的功能块。 AMBA是一种广泛用于…

设计模式-代理模式

代理模式 ● 为对象提供一个代理类&#xff0c;增强该对象的方法&#xff0c;控制对这个对象的访问 ● 静态代理和动态代理&#xff1a;静态代理就是编译的时候就已经确定&#xff0c;而动态代理就是运行时才会生成 静态代理的使用场景 缓存代理 ● 提供数据的缓存功能&…