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

文章目录

  • 一、存储服务的演化
    • 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.mzph.cn/news/4226.shtml

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

相关文章

3D全景虚拟旅游在旅游行业中具备哪些应用价值?

在网络强国战略指引下,我们的网络基础设施建设步伐正在加快,与此同时,虚拟技术也在不断的更新迭代,虚拟旅游也逐渐崭露头角,将真实世界中的景点、文化以及历史场景等数字化,让游客身临其境地感受这些景点和…

HBase(一)HBase v2.2 高可用多节点搭建

最近刚刚完成了HBase相关的一个项目,作为项目的技术负责人,完成了大部分的项目部署,特性调研工作,以此系列文章作为上一阶段工作的总结. 前言 其实目前就大多数做应用的情况来讲,我们并不需要去自己搭建一套HBase的集群,现有的很多云厂商提供的服务已经极大的方便日常的应用使…

javaweb使用Thymeleaf 最凝练的CRUD项目-中

javaweb使用Thymeleaf 最凝练的CRUD项目-中 6、显示首页 ①目标 浏览器访问index.html&#xff0c;通过首页Servlet&#xff0c;渲染视图&#xff0c;显示首页。 ②思路 ③代码 [1]创建PortalServlet <servlet><servlet-name>PortalServlet</servlet-name…

怎么用Midjourney制作表情包

要使用Midjourney制作表情包&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 打开Midjourney的官方网站或下载Midjourney应用程序&#xff0c;并登录你的账户。 2. 在Midjourney中&#xff0c;选择创建新项目或表情包。 3. 在项目中&#xff0c;你可以选择使用预设的模…

类 和 对象

目录 1、面向对象编程 2、面向对象编程 2.1面向对象编程特征 3、类和对象的概念 3.1类的定义 3.11属性 3.12方法 3.13重载 3.14递归 3.13返回值return 3.2对象 3.2.1对象组合 4、jvm内主要三块内存空间 5、参数传值 1、面向对象编程 面向过程&#xff1a;关注的是步骤…

将大模型集成到语音识别系统中的例子

概述 本文旨在探索将大型语言模型&#xff08;LLMs&#xff09;集成到自动语音识别&#xff08;ASR&#xff09;系统中以提高转录准确性的潜力。 文章介绍了目前的ASR方法及其存在的问题&#xff0c;并对使用LLMs的上下文学习能力来改进ASR系统的性能进行了合理的动机论证。 本…

深度学习标量、向量、矩阵、张量之间的区别与联系

文章目录 前言1、张量**注意**&#xff1a; 2、**标量** (scalar)&#xff1a;0阶的张量&#xff0c;0个轴&#xff0c;一个单独的数(整数或实数)&#xff1b;3、**向量**(vector)&#xff1a;1阶的张量&#xff0c;也叫矢量&#xff0c;1个轴&#xff0c;一个数组&#xff1b;…

那些你必须知道的4个matlab小技巧(附最新安装包)

文末福利&#xff1a;MATLAB R2022b软件安装包 MATLAB 简介 01 一、MATLAB简介 数学类科技应用软件包括数值计算&#xff08;Number Crunching&#xff09;型软件和数学分析&#xff08;Math Analysis&#xff09;型软件 数值计算型软件 它们对大批数据具有较强的管理、计…

微信小程序下拉刷新获取数据和触底事件刷新实现

一、下拉刷新 1.json文件 说明&#xff1a;开启下拉刷新&#xff0c;然后设置窗口的背景色&#xff0c;方便观看。 "enablePullDownRefresh": true,"backgroundColor":"#FFC0CB" 2. js文件 说明&#xff1a;重新发起请求&#xff0c;并显示加…

【问题总结】Docker环境下备份和恢复postgresql数据库

目录 文章目录 以从备份恢复forest_resources库为例一、备份数据库二、需要还原的数据库准备1 删除掉远程的库。2 重新创建一个空的库。可以使用sql3 找到数据库存放的路径&#xff0c;并将备份文件上传到对应的路径下 三、 进入docker容器内部&#xff0c;执行数据库恢复附录…

Vue3统计数值(Statistic)

可自定义设置以下属性&#xff1a; 数值的标题&#xff08;title&#xff09;&#xff0c;类型&#xff1a;string | slot&#xff0c;默认&#xff1a;‘’数值的内容&#xff08;value&#xff09;&#xff0c;类型&#xff1a;string | number&#xff0c;默认&#xff1a;…

AlphaPose复现配置教程

AlphaPose复现配置教程 AlphaPose介绍 AlphaPose是一种准确的多人姿态估计器&#xff0c;这是第一个在COCO数据集上达到70 mAP (75 mAP)和在MPII数据集上达到80 mAP (82.1 mAP)的开源系统。为了匹配跨帧的同一人的姿态&#xff0c;我们还提供了一种高效的在线姿态跟踪器&…

scala学习手册

1. case class学习 样例类模式匹配 1.1 样例类&#xff08;case class&#xff09;适合用于不可变的数据。它是一种特殊的类&#xff0c;能够被优化以用于模式匹配。 case class MetaData(userId: String)case class Book(name: String) {def printBookName(): Unit {printl…

跨网络的通信过程、路由的作用以及默认网关

如下网络拓扑图&#xff0c;交换机0所在的网段为192.168.1.0/24&#xff0c;交换机1所在网段为192.168.2.0/24&#xff0c;且各自有2台主机&#xff1a; 假设PC0&#xff08;192.168.1.10/32&#xff09;要跟PC4&#xff08;192.168.2.11/32&#xff09;通信&#xff0c;如何实…

函数和控制流

专栏简介&#xff1a;本专栏作为Rust语言的入门级的文章&#xff0c;目的是为了分享关于Rust语言的编程技巧和知识。对于Rust语言&#xff0c;虽然历史没有C、和python历史悠远&#xff0c;但是它的优点可以说是非常的多&#xff0c;既继承了C运行速度&#xff0c;还拥有了Java…

Simulink仿真模块 - Data Store Read

Data Store Read:从数据存储中读取数据 在仿真库中的位置为:Simulink / Signal Routing 模型为: 说明 Data Store Read 模块将指定数据存储中的数据复制到其输出中。多个 Data Store Read 模块可从同一个数据存储读取数据。 用来读取数据的源数据存储由 Data Store Memory 模…

vue+element-ui通用后台管理系统(适合新手)

vueelement-ui通用后台管理系统&#xff08;适合新手&#xff09; 1、使用到的技术 使用vue2element-uiaxiosjs-cookielessecharts实现的一个简易的通用后台管理系统&#xff0c;具有很强的可扩展性&#xff0c;修改简单&#xff0c;只要有点前端基础就能看懂&#xff1b; 2…

怎么学习Java数据库连接(JDBC)? - 易智编译EaseEditing

学习Java数据库连接&#xff08;JDBC&#xff09;是掌握Java与数据库交互的关键步骤。以下是学习Java JDBC的一些建议&#xff1a; 先掌握Java基础&#xff1a; 在学习JDBC之前&#xff0c;确保你已经掌握了Java的基本语法、面向对象编程和其他核心概念。这将有助于更好地理解…

Spring、SpringBoot、SpringCloud、SpringCloud Alibaba、Elasticsearch版本对应,附下载地址

1、GitHub Alibaba 发布SpringCloud Alibaba和SpringCloud 、SpringBoot版本 Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot2022.0.0.0-RC2Spring Cloud 2022.0.03.02022.0.0.0-RC1Spring Cloud 2022.0.03.0.02021.0.5.0*Spring Cloud 2021.0.52.6.132021.0.4…

基于FPGA的softmax函数优化及实现

文章目录 前言优化方案测试数据产生及Matlab结果处理流程工程说明功耗与面积标准softmax函数功耗与面积总结前言 FPGA异构计算是一个趋势,在AI推理、深度学习中广泛使用FPGA进行加速,减小系统延迟。而AI推理中有一个组件被广泛使用,各种网络模型中都有其身影,那就是激活函…