【数据库】详解数据库架构优化思路(两主架构、主从复制、冷热分离)

文章目录

  • 1、为什么对数据库做优化
  • 2、双主架构
    • 双主架构的工作方式如下:
    • 双主架构的优势包括:
    • 但是一般不用这种架构,原因是:
  • 3、主从复制
    • 主从复制的工作方式如下:
    • 主从复制的优势包括:
    • 主从复制的缺点
  • 4、冷热分离
    • 冷数据
    • 热数据

1、为什么对数据库做优化

对数据库架构进行优化是为了提高数据库系统的性能、可扩展性、稳定性和可维护性。MySQL官方说:单表2000万数据,性能就达到瓶颈了,为了保证查询效率需要让每张表的大小得到控制。
再来说,为什么要提高查询效率呢?

除了普通的用户查询操作,增、删、改操作都包含查询操作,所以说,在一个应用中,查询操作是占比最高的,提高了查询效率,整体性能都会有所提升。

下面介绍几种常见方案

2、双主架构

它旨在提高数据库的可用性和负载均衡。在双主架构中,有两个主数据库实例(也称为主节点),每个主数据库都可以处理读写操作,而不仅仅是一个主数据库处理写操作,另一个主数据库处理读操作。

双主架构的工作方式如下:

  • 数据同步: 两个主数据库之间需要建立数据同步机制,以保持数据的一致性。通常使用主从复制或双向复制来实现数据同步。这意味着任何一个主数据库上的写操作都会同步到另一个主数据库,从而保持数据的同步。
  • 读写操作: 由于双主架构允许两个主数据库都处理读写操作,因此应用程序可以同时向这两个主数据库发送写操作和读操作。这可以减轻单个主数据库的负载
  • 故障切换: 如果其中一个主数据库发生故障,应用程序可以切换到另一个正常运行的主数据库,以保持系统的可用性。故障切换时,应该确保切换后的主数据库是最新的,并且可以快速地切换到备用主数据库。
    在这里插入图片描述

双主架构的优势包括:

  • 高可用性: 双主架构可以提供较高的可用性,因为即使一个主数据库发生故障,另一个主数据库仍然可以继续处理读写操作。
  • 负载均衡: 两个主数据库可以分摊读写负载,从而提高数据库的性能和响应性能。
  • 容错性: 如果一个主数据库出现问题,可以快速切换到另一个主数据库,从而减少系统的停机时间。

但是一般不用这种架构,原因是:

这种架构只是做了负载均衡,当写操作频繁时,会导致两个主数据库之间的数据同步压力增大。还有就是,现实中,一天可能就会产生1000w条数据,两个主数据库的单表会很大,影响读和写的性能。

3、主从复制

主从复制是一种常见的数据库复制技术,用于在多个MySQL数据库之间实现数据同步。在主从复制中,有一个主数据库(主节点)负责处理写操作,而一个或多个从数据库(从节点)将主数据库的数据复制到自身,用于处理读操作。

主从复制和双主架构都实现了负载均衡,但主从复制将读操作和写操作进行了分离,主数据库只承担写操作,从数据库只承担读操作,从而减轻主库的负载。对于频繁的写操作场景,将读操作分散到从库可以提高主库的性能,从而更好地处理写入请求。

主从复制的工作方式如下:

  • 主库(主节点): 主库负责处理所有的写操作,如插入、更新和删除操作。主库上的写操作会被记录在二进制日志(binary log)中,这是一个记录数据库变更的日志文件。
  • 从库(从节点): 从库通过读取主库的二进制日志,将主库的写操作逐一复制到自身。从库会保持与主库的数据一致性。从库可以用于处理查询操作,从而分担主库的负载。

主从复制的优势包括:

  • 高可用性: 主从复制提供了一种冗余备份,如果主库发生故障,可以切换到从库以保持系统的可用性。

  • 负载均衡: 从库可以用于处理读操作,从而减轻主库的负载,提高数据库的性能和响应性。

  • 数据备份: 从库可以用于数据备份和恢复,因为它保留了与主库相同的数据。

主从复制的缺点

  1. 不满足强一致性
    在MySQL中,主节点入库的时候可以选择采用某种方式来判定入库成功
    1. 主节点入库以后,不管从节点是否同步成功,直接返回sql执行成功。 这种方式的特点就是快,但是不满足强一致性:由于延迟和复制过程中的一些异常情况,从库和主库之间可能会出现数据不一致的问题。在复制链路上发生故障或者复制操作出现错误时,可能会导致从库数据与主库不一致。 在存储一些不太敏感的数据(操作记录,日志)时,可以采用。
    2. 主节点入库以后,等所有的从节点都同步完成以后,才返回sql执行成功,当有一个从节点落库失败,返回执行失败。 这种方式可以满足强一致性,会比较慢。 对于存储敏感数据(跟钱有关),采用这种方式。
  2. 同步延迟问题
    我刚提交了订单就去查询订单列表,这时主库刚入库,从库还没去主库同步。有可能看不到我新下的订单。还有可能是,我去申请退款并且已经显示了退款成功,我去查订单列表,由于从库还没有同步主库的数据,还会显示购买成功。
    可以采用分布式全局锁,等查询从库的时候,如果退款状态是false(未退款),再去redis中查看分布式全局锁是否存在,如果存在就说明主库已经完成退款操作,只是从库还没同步过来,可以通知用户后台正在处理,请稍后再试。如果redis中不存在这个锁,就说明该订单的确未退款。

上述的主从复制对读、写操作进行了分离,将读操作平摊给了注册的从数据库,分担了主数据库的查询压力。但是没有解决表大小的问题,当单表的数据达到2000w后,主数据库的写操作(包含查询)达到瓶颈,从数据库的读操作也达到了瓶颈。针对表大下,于是有了下面的架构

就是将原本要装几千万数据的单表,进行拆分,如下图:
在这里插入图片描述
就是在执行入库或查询之前,可以通过数据的id%主库的数量,将操作均分到每个主从复制单位上。

当数据量过亿时,此时要是延续上面的方案,至少需要10个数据库,当数据量再多,过10亿时,至少需要100个数据库,这是不现实的。那么好(哈哈哈哈)下面就来介绍一下,当数据量破亿后,该如何优化。

4、冷热分离

表数据量增长速度快或数据量较大时, 我们就该考虑是否使用冷热分离解决方案了

冷数据

这是不经常被访问的数据(好比打入冷宫),通常是历史数据或者很少被查询的数据。冷数据不需要频繁的访问速度,因此可以存储在较慢但成本更低的存储介质中,如磁盘存储或者分布式文件系统。冷数据可以通过归档、压缩等手段来节省存储空间。
好比你要查询美团外卖的订单,你应该很少或者从不去查询1年以前或者更久远的订单吧。这种冷数据如果和其他表没有关联的话可以直接扔es,es在数据量1TB的情况下,单次查询可达到秒级。

热数据

这是经常被访问的数据,通常是最近的数据,或者是频繁被查询和更新的数据。热数据对于应用的性能至关重要,因此可以采用较快的存储介质,如内存或快速的闪存存储设备。对于关系型数据库,热数据可以存储在主数据库中。

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

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

相关文章

回归预测 | MATLAB实现NGO-SVM北方苍鹰算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现NGO-SVM北方苍鹰算法优化支持向量机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现NGO-SVM北方苍鹰算法优化支持向量机多输入单输出回归预测(多指标,多图)效果一览基…

机器学习知识点总结:什么是EM(最大期望值算法)

什么是EM(最大期望值算法) 在现实生活中,苹果百分百是苹果,梨百分白是梨。 生活中还有很多事物是概率分布,比如有多少人结了婚,又有多少人有工作, 如果我们想要调查人群中吸大麻者的比例呢?敏感问题很难得…

【VR】SteamVR2.0的示例场景在哪里

💦本专栏是我关于VR开发的笔记 🈶本篇是——在哪里可以找到SteamVR2.0的示例场景 SteamVR2.0的示例场景在哪里 1. 逐步打开方式2. 快速打开方式 1. 逐步打开方式 Assets——SteamVR——InteractionSystem——Samples——>Interactions_Example 2. 快…

多维时序 | MATLAB实现KOA-CNN-BiGRU-Attention多变量时间序列预测

多维时序 | MATLAB实现KOA-CNN-BiGRU-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现KOA-CNN-BiGRU-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现KOA-CNN-BiGRU-Attention多变量时间序列预测,KOA-…

Postman项目实战一

项目简介:外卖任务委派系统 测试脚本: 登录,获取token创建任务,获取任务id根据id,修改任务根据id,查询任务根据id,删除任务根据id,验证任务已被删除 步骤: 1.创建Col…

工业生产全面感知!工业感知云来了

面向工业企业数字化转型需求,天翼物联基于感知云平台创新能力和5G工业物联数采能力,为客户提供工业感知云服务,包括工业泛协议接入、感知云工业超轻数采平台、工业感知数据治理、工业数据看板四大服务,构建工业感知神经系统新型数…

C++(Qt)软件调试---gdb调试入门用法(12)

gdb调试—入门用法(1) 文章目录 gdb调试---入门用法(1)1、前言1.1 什么是GDB1.2 为什么要学习GDB1.3 主要内容1.4 GDB资料 2、C/C开发调试环境准备3、gdb启动调试1.1 启动调试并传入参数1.2 附加到进程1.3 过程执行1.4 退出调试 4…

计算机竞赛 卷积神经网络手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

mysql------做主从复制,读写分离

1.为什么要做主从复制(主从复制的作用) 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满…

shell和Python 两种方法分别画 iostat的监控图

在服务器存储的测试中,经常需要看performance的性能曲线,这样最能直接观察HDD或者SSD的性能曲线。 如下这是一个针对HDD跑Fio读写的iostat监控log,下面介绍一下分别用shell 和Python3 写画iostat图的方法 1 shell脚本 环境:linux OS gnuplot工具 第一步 :解析iosta…

DETR-《End-to-End Object Detection with Transformers》论文精读笔记

DETR(基于Transformer架构的目标检测方法开山之作) End-to-End Object Detection with Transformers 参考:跟着李沐学AI-DETR 论文精读【论文精读】 摘要 在摘要部分作者,主要说明了如下几点: DETR是一个端到端&am…

测试工具coverage的高阶使用

在文章Python之单元测试使用的一点心得中,笔者介绍了自己在使用Python测试工具coverge的一点心得,包括: 使用coverage模块计算代码测试覆盖率使用coverage api计算代码测试覆盖率coverage配置文件的使用coverage badge的生成 本文在此基础上…

【Android】设置-显示-屏保-启用时机-去除插入基座相关(不支持该功能的话)

设置-显示-屏保-启用时机-去除插入基座相关(不支持该功能的话) 1-项目场景:2-问题描述3-解决方案:4-代码修改前后效果对比图:代码修改前:代码修改后: 1-项目场景: 展锐平台 2-问题描…

ctfshow-web12

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 国际惯例看一下返回包,是不是有注释 然后做一下测试,看是命令执行还是代码执行 通过phpinfo看到可以执行代码 然后尝试执行命令,无法,发现存在disable_function…

基于nginx禁用访问ip

一、背景 网络安全防护时,禁用部分访问ip,基于nginx可快速简单实现禁用。 二、操作 1、创建 conf.d文件夹 在nginx conf 目录下创建conf.d文件夹 Nginx 扩展配置文件一般在conf.d mkdir conf.d 2、新建blocksip.conf文件 在conf.d目录新建禁用ip的扩展配置文…

从头到尾说一次 Spring 事务管理(器) | 京东云技术团队

事务管理,一个被说烂的也被看烂的话题,还是八股文中的基础股之一。​ 本文会从设计角度,一步步的剖析 Spring 事务管理的设计思路(都会设计事务管理器了,还能玩不转?) 为什么需要事务管理&…

C++基础Ⅰ编译、链接

目录儿 1 C是如何工作的1.1 预处理语句1.2 include1.3 main()1.4 编译单独编译项目编译 1.5 链接 2 定义和调用函数3 编译器如何工作3.1 编译3.1.1 引入头文件系统头文件自定义头文件 3.1.2 自定义类型3.1.3 条件判断拓展: 汇编 3.2 链接3.2.1 起始函数3.2.2 被调用的函数 3.3 …

无人机精细化巡检方案制定:提高效率与准确性的关键

在当前技术日新月异的时代,无人机在多个领域的应用已成为行业标配。但如何制定出一套有效、细致的无人机巡检方案,确保其最大效能,成为许多组织与公司的核心议题。其中,复亚智能在此领域已展现出了卓越的实力与深入的见解。 1. 精…

把matlab的m文件打包成单独的可执行文件

安装Matlab Compiler Adds-on在app里找到Application Compiler 选择要打包的文件matlab单独的运行程序的话需要把依赖的库做成runtime. 这里有两个选项. 上面那个是需要对方在联网的情况下安装, 安装包较小.下面那个是直接把runtime打包成安装程序, 大概由你的程序依赖的库的多…

游乐场vr设备虚拟游乐园vr项目沉浸体验馆

在景区建设一个VR游乐场项目可以为游客提供一种新颖、刺激和沉浸式的游乐体验。提高游客的体验类型,以及景区的类目,从而可以吸引更多的人来体验。 1、市场调研:在决定建设VR游乐场项目之前,需要进行市场调研,了解当地…