存储服务的演化与MySQL分库分表

news2024/11/26 18:48:56

文章目录

  • 一、存储服务的演化
    • 1.单体结构
    • 2.单表单库的数据量膨胀 -> 分库分表
    • 3.单个MySQL的读写压力过大 -> MySQL索引优化
    • 4.进一步缓解MySQL读写压力 -> 读写分离
    • 5.冷热数据分离 -> 使用Redis缓存
  • 二、MySQL分库分表
    • 1.策略
    • 2.需要注意的问题

一、存储服务的演化

1.单体结构

最初,服务只有一个MySQL存储。当用户通过浏览器发送请求时,请求会被发送到Java服务器上,这个后端的Java服务是使用Spring、MyBatis等框架编写的。后端服务会与MySQL进行交互,进行数据查询或写入操作。

在这里插入图片描述

2.单表单库的数据量膨胀 -> 分库分表

单表单库的数据量会不断增大,这个时候就可以考虑分库分表。分库分表的具体做法见下一章。

在这里插入图片描述

3.单个MySQL的读写压力过大 -> MySQL索引优化

如果我们碰到的是读多写少的场景,可以先尝试添加合适的索引。我在这篇博客中详细介绍了MySQL索引优化的内容。

4.进一步缓解MySQL读写压力 -> 读写分离

如果在为MySQL添加适当的索引后,单机仍然无法处理读取流量,可以考虑使用从库进行读写分离,以便多个从库共同分担读取流量。如果读写负载相对均衡,还可以考虑主从读写分离方案,这样主库只处理写入流量,从库只处理读取流量,从而减轻单个MySQL上的压力。

在这里插入图片描述

5.冷热数据分离 -> 使用Redis缓存

除了在全量数据上进行分治,还可以根据数据访问情况进行分治,将数据区分为冷热数据,并将经常访问的"热"数据放入更快的存储介质中,例如缓存。这样可以提高热数据的访问速度,减轻数据库的负载压力。

红色字体为读流程,蓝色字体为写流程。

在这里插入图片描述

二、MySQL分库分表

MySQL分库分表是一种在大规模数据存储和高并发访问场景下的数据库架构设计方法。它将一个大型的数据库拆分成多个小型的数据库(分库),并将每个数据库中的表进一步拆分成多个小表(分表),从而实现数据的水平拆分和分布式存储。

分库分表的主要目的是解决单一数据库在数据量和访问压力增大时的性能瓶颈和扩展性问题。通过将数据分散到多个数据库和表中,可以提高数据库的并发处理能力和查询性能。

1.策略

在MySQL分库分表中,通常采用以下策略:

  1. 垂直分库:将不同的业务数据存储在不同的数据库中。例如,将用户信息存储在一个数据库中,将订单信息存储在另一个数据库中。这样可以根据业务需求对不同的数据库进行独立的扩展和优化。

  2. 水平分表:将单个表按照某个规则(如范围、哈希、取模等)拆分成多个小表。例如,将订单表按照订单ID的范围进行拆分,将不同范围的订单存储在不同的表中。这样可以减少单个表的数据量,提高查询性能。

2.需要注意的问题

在进行MySQL分库分表时,有一些需要注意的问题:

  • 数据一致性: 分库分表可能导致数据的分散和拆分,需要确保数据在不同数据库和表之间的一致性。在进行跨库事务或跨表查询时,需要考虑数据的一致性处理。在分表场景下,需要确保生成的主键在不同表之间唯一且不重复。可以使用 分布式主键生成算法或者数据库自增主键 来保证主键的唯一性。

  • 跨库查询和事务: 在分库分表架构中,跨库查询和跨库事务是常见的需求。需要考虑如何处理跨库查询的性能和复杂性,除了要进行索引优化、查询路由优化等常规优化之外,还要选择合适的分布式事务管理方案。

  1. XA事务:XA是一种经典的分布式事务协议,它通过两阶段提交(Two-Phase Commit,2PC)协议来实现分布式事务的一致性。XA事务要求所有参与者(包括数据库、消息队列等)都支持XA协议。
  1. TCC事务:TCC(Try-Confirm-Cancel)是一种补偿型事务模式,它通过在业务逻辑中显式地定义Try、Confirm和Cancel三个阶段来实现分布式事务的一致性。TCC事务适用于对数据一致性要求较高的场景。
  1. 消息队列事务:一些消息队列中间件(如Apache Kafka、RabbitMQ)提供了事务性消息的支持。通过将事务性操作和消息发送放在同一个事务中,可以实现分布式事务的一致性。
  1. Saga模式:Saga是一种长事务处理模式,通过将一个大事务拆分为多个小事务,并使用补偿机制来保证事务的一致性。Saga模式适用于业务逻辑复杂、需要长时间执行的场景。
  1. 基于可靠消息的最终一致性:在一些分布式系统中,通过使用可靠消息队列和事件驱动的方式来实现最终一致性。每个参与者将操作转化为消息发送,并通过订阅和处理消息来实现最终一致性。

选择适合的分布式事务管理方案时,需要考虑业务需求、系统复杂性、性能要求和开发成本等因素。每种方案都有其优缺点,需要根据具体情况进行评估和选择。如果需要更详细的信息,可以使用搜索引擎进行进一步的调研。

  • 数据维护: 在分库分表后,可能需要进行数据迁移、回滚、扩容操作。需要考虑如何平滑地将数据从一个数据库或表迁移到另一个数据库或表,并确保数据的完整性和一致性。

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

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

相关文章

「深度学习之优化算法」(十六)万有引力算法

1. 万有引力算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读) 万有引力算法(Gravitational Search Algorithm)是受物体之间的万有引力启发而提出的算法。算法提出于2008(2009)年,时间不长,不过相关的文章和应用已经相对较多,也有不少的优化改进方案。   万…

浅谈性能测试策略之银行测试

一、性能测试的四个方面 在一般的性能测试讨论中大家通常只围绕三个方面进行提问和总结:测试脚本如何编写,被测系统如何监控,性能瓶颈如何调优。大部分刚刚接触性能测试的人会纠结于脚本的编写,如何设置参数化、如何设置关联、何时…

宋浩高等数学笔记(五)定积分

本章内容和第四章的不定积分其实大差不差,然而不定积分本身与求和无关,本质为求导的逆运算;而定积分则和求导无关,实质为无限分割再求和。而牛顿莱布尼茨公式的伟大之处在于,可以用不定积分这个求导的逆运算来计算定积…

OpenCv之Canny

目录 一、自适应阈值 二、边缘检测Canny 一、自适应阈值 引入前提:在前面的部分我们使用是全局闻值,整幅图像采用同一个数作为闻值。当时这种方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不同亮度时。这种情况下我们需要采用自适应闻…

第七次CCF计算机软件能力认证

第一题: 折点计数 给定 n 个整数表示一个商店连续 n 天的销售量。 如果某天之前销售量在增长,而后一天销售量减少,则称这一天为折点,反过来如果之前销售量减少而后一天销售量增长,也称这一天为折点。 其他的天都不是折…

白皮书分享|数字孪生应用门槛降低!速来围观易知微新型技术成果

一、数字孪生应用门槛 (一)数字孪生的概念 百度百科中的数字孪生 (Digital Twin)1 定义,是充分利用物理模型、传感器更新、运行历史等数据,集成多学科、多物理量、多尺度、多概率的仿真过程,在虚拟空间中完成映射&…

MySQL数据库,冷备份,热备份,温备份,物理备份,逻辑备份

🧊冷备份 MySQL数据库冷备份的优点包括: 快速备份:冷备份只需要拷贝文件,因此备份速度非常快,不会影响数据库的读写操作。易于归档和恢复:冷备份可以通过简单拷贝文件进行归档和恢复,而且可以…

MP3416 是一款低静态电流、升压变换器

详情 MP3416 是一款低静态电流、升压变换器,利用峰值电流控制和变频架构来调节输出电压。MP3416 的工作输入电压低至 0.86V,提供 1.8V 至 5.5V 输出电压。 MP3416 在峰值电流控制模式下工作,提供良好的瞬态响应能力。它集成的 P 路同步整流…

(数组与矩阵) 剑指 Offer 50. 第一个只出现一次的字符 ——【Leetcode每日一题】

❓ 剑指 Offer 50. 第一个只出现一次的字符 难度:简单 在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。 示例 1: 输入:s “abaccdeff” 输出:‘b’ 示例 2: 输入:s “”…

Linux系统休眠问题解决

近期,断电重启后的服务器总是莫名其妙断开连接,必须重启才能再次连上,但是一小段时间后,会再次断开。通过查看系统日志,观察到是系统休眠问题引起的,查看命令: cat /var/log/syslog 查询到的信…

APP开发:如何制定有效的测试策略

APP开发在进行测试的时候,是一个非常复杂的过程,它需要多个团队参与进来,并且要制定很多测试策略,同时还需要在测试过程中不断的进行优化,来提升测试质量。 APP开发完成之后,并不是万事大吉了,…

DTU凭什么可以为数据提供高效可靠的稳定传输?

当谈及到智能化的发展时,其实它已经正在影响着各行各业,当前许多传统行业也正在向智能化转变。如果你细心留意的话,就会发现在我们日常生活中多少都会见到它们的身影,例如:村庄各家各户墙外所挂的煤改电设备、居民楼小…

layui增删改查的实现

前言 在前三篇layui博客的基础上继续完善,这篇博客增加了数据表格来实现增删改查 这里要注意layui需要使用2.6以上的版本 dao方法的编写 package com.zking.dao;import java.util.List; import java.util.Map;import com.zking.entity.User; import com.zking.uti…

软件度量工具infusion

软件度量工具 文章目录 软件下载infusion使用iplasma使用 软件下载 链接:https://pan.baidu.com/s/1xI_bWvJ845kcHXM2m-K4QA?pwdxn48 提取码:xn48 infusion使用 运行环境: 32位java6 运行步骤: 双击inFusionDebug.exe 运行 …

【QT】——QListWidget的使用

目录 1.QListWidget和QListWidgetItem 2.外观 2.1列表模式 2.2图标模式 3.常用接口 4.示例 删除列表项 添加列表项 1.QListWidget和QListWidgetItem QListWidget 是qt中的列表框控件,它用于显示多个列表项,列表项对应的类是QListWidgetItem. Q…

MySQL操作库

MySQL操作库 一.创建数据库1. 创建数据库的方式2. 创建数据库时的编码问题3. 指定编码创建数据库4. 验证校验规则对数据库的影响 二.数据库与文件系统的关系三.操纵数据库1. 查看数据库2. 删除数据库3. 修改数据库 四.数据库的备份和恢复1.数据库的备份2.数据库的恢复 五.查看连…

认识Vue3

✅作者简介:大家好,我是Cisyam,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Cisyam-Shark的博客 💞当前专栏: Vue ✨特色专栏&#xff…

C#基础--反射

反射 一、为什么学习反射 因为反射真的是无处不在,ORM、MVC、IOC、AOP、Attribute等等都会使用到反射。反射是程序员的快乐 二、什么是反射 Ilspy:逆向工程,可以吧DLL/Exe文件反编译回来 DLL/EXE 文件下包含Metadata和IL,IL是对标于C#代码的代码,属于中间语言,是标准的…

虚拟云网络系列 | Antrea 应用于 VMware 方案功能简介(十一)

本篇推文继续之前讨论 Antrea 与 NSX Manager 整合的手动安装流程,接下来要讨论流程四、五、六。这几篇讨论的安装流程图如下,相关的步骤于官方文件内有正式的说明。 流程四: 修改安装配置档,输入 NSX 及凭证相关资讯 流程一内我…

面试官:为什么RPC框架历经数十年还在造轮子?同时期的EJB骨灰都快找不到了!

文章目录 再谈谈RPC的理解RPC的发展史RPC历经数十年而不衰的原因?1、分布式系统的需求2、RPC相关技术的演进3、多语言的支持 本文源自一次面试官的提问:说说你对于RPC框架的了解,你知道哪些RPC框架,以及为什么RPC历经几十年还能不断推出新的…