数据库中高并发、大数据量和高可用的解决方案。

news/2024/6/15 16:46:23/文章来源:https://blog.csdn.net/m0_56615376/article/details/137226738

数据库中高并发、大数据量和高可用的解决方案。

当数据库需要应对高并发、大数据量和高可用性等需求时,常用的解决方案包括主从同步和分库分表。

**主从同步原理:**核心是二进制文件。

1. 主服务器(Master):
  • 二进制日志(Binary Log):主服务器将所有的写操作记录到二进制日志中。二进制日志包含了对数据库进行更改的所有信息,以二进制形式记录,不同于普通的文本日志,可以准确地重放数据库更改。
  • 二进制日志文件(Binary Log Files):二进制日志文件是二进制日志的实体文件,按照一定的规则生成和轮换。主服务器会不断地向二进制日志文件中写入新的日志事件。
  • 二进制日志的格式:MySQL支持多种不同的二进制日志格式,包括基于语句的复制(Statement-Based Replication,SBR)、基于行的复制(Row-Based Replication,RBR)和混合模式复制(Mixed-Based Replication,MBR),每种格式都有其优缺点。
2. 从服务器(Slave):
  • I/O线程(I/O Thread):从服务器上运行的I/O线程负责连接到主服务器,获取主服务器的二进制日志,并将其写入到本地的中继日志文件中。这个过程中,I/O线程会不断地从主服务器请求二进制日志。
  • SQL线程(SQL Thread):从服务器上运行的SQL线程负责读取中继日志文件中的日志事件,并将这些事件应用到从服务器的数据库中。SQL线程会解析中继日志中的二进制日志事件,并在从服务器上执行相应的SQL语句,以实现数据的同步。
3. 主从同步的过程:
  • 主服务器的写操作:当主服务器接收到客户端的写操作时,会先将这些操作记录到自己的二进制日志中。
  • 从服务器的同步请求:从服务器上的I/O线程会定期连接到主服务器,请求获取主服务器的二进制日志。
  • 二进制日志传输:主服务器将二进制日志传输给从服务器的I/O线程,从服务器接收到二进制日志后,会将其写入到本地的中继日志文件中。
  • 日志事件的应用:从服务器的SQL线程会读取中继日志文件中的日志事件,并将其应用到从服务器的数据库中,以实现数据的同步。
4. 同步延迟与一致性:
  • 同步延迟(Replication Lag):由于网络延迟、从服务器性能等原因,从服务器上的数据同步可能会滞后于主服务器。同步延迟是一个常见的问题,需要通过优化网络连接、调整配置参数等方式来尽量减少延迟。
  • 数据一致性(Consistency):主从同步的目标之一是保持数据的一致性。在正常情况下,主从服务器上的数据应该是相同的。但在特殊情况下(如网络分区、主服务器宕机等),可能会出现数据不一致的情况,需要通过手动处理来确保数据的一致性。
5. 主从同步的监控与管理:
  • 监控同步状态:通过MySQL提供的SHOW SLAVE STATUS等命令可以监控从服务器的同步状态,包括同步延迟、错误信息等。
  • 处理同步问题:当发生同步延迟或同步错误时,需要及时进行故障排查和处理,可能需要调整配置参数、优化网络连接或进行故障转移等操作。
6. 主从同步的故障恢复与维护:
  • 自动故障恢复:MySQL从服务器具有自动重连功能,在与主服务器的连接断开后会自动尝试重新连接。
  • 手动故障恢复:当自动恢复无法解决问题时,可能需要手动进行故障转移和数据恢复,以确保数据库系统的可用性和稳定性。

分库分表:

分库分表是指将一个大型数据库按照一定的规则划分成多个小型数据库,并且将每个小型数据库的表按照一定的规则分散存储在不同的物理服务器上。这样做的目的是提高数据库的性能、扩展性和可用性。

分库分表策略:水平拆分、垂直拆分。

分库

分库(Database Sharding)是指将整个数据库按照一定的规则分成多个独立的数据库单元,每个数据库单元称为一个分库,从而分散数据库的负载和提高系统的扩展性。

1. 水平划分 and 垂直划分:
  • 水平划分:将数据按照某种规则分散到不同的分片中,每个分片可以放在不同的物理服务器上,从而实现数据的水平扩展。常见的分片规则包括基于范围的分片和基于哈希的分片。
  • 垂直划分:将数据表按照列的维度进行划分,将不同的列放在不同的表中,从而减少单个表的数据量,提高查询效率和维护性。
2. 分库策略的选择:
  • 基于业务关联性:根据业务逻辑将相关联的数据放在同一个分库中,从而减少跨库查询的复杂度和性能开销。例如,在一个电商平台中,将用户信息、订单信息放在同一个分库中。
  • 基于查询模式:根据业务查询模式将数据分布到不同的分库中,以提高查询性能。例如,将高频查询的数据放在独立的热点库中,将低频查询的数据放在普通库中。
  • 基于地理位置:根据用户地理位置或数据访问地理位置将数据分布到不同的分库中,以降低跨地域访问的网络延迟。例如,在一个全球化的社交网络平台中,将欧洲用户的数据放在欧洲的分库中,将亚洲用户的数据放在亚洲的分库中。
3. 示例:

假设我们有一个在线教育平台,需要设计用户信息存储的分库策略。

  • 基于业务关联性:我们将用户信息、课程信息、订单信息放在同一个分库中,以便于业务逻辑的处理和查询优化。
  • 基于查询模式:我们将用户信息和订单信息放在独立的分库中,因为用户信息经常被查询,而订单信息相对较少被查询,这样可以减少对用户信息分库的负载压力。
  • 基于地理位置:我们将用户信息按照用户地理位置进行分库,例如将国内用户信息放在国内的分库中,将海外用户信息放在海外的分库中,从而降低跨地域访问的延迟。

分表:

1. 水平划分(Sharding):

在水平划分中,数据按照某种规则分散到不同的分片中,常见的方式包括:

  • 基于范围的分片:根据数据的范围进行划分,例如按照用户注册时间范围划分分片。举例来说,假设有一个电商平台,可以按照用户注册的时间范围将用户数据划分到不同的分片中,比如将注册时间在2010年至2015年的用户放在一个分片,注册时间在2016年至2020年的用户放在另一个分片中。
  • 基于哈希的分片:通过对某个唯一标识(如用户ID、订单ID)进行哈希运算,将数据均匀地散列到不同的分片中。举例来说,假设一个社交网络平台,可以通过对用户ID进行哈希运算,将用户数据分散到不同的分片中。
2. 垂直划分(Vertical Partitioning):

在垂直划分中,数据表按照列的维度进行划分,常见的方式包括:

  • 按业务关联性进行划分:将业务关联性较高的列放在同一个表中,将不相关的列分开存储。例如,在一个电商平台中,可以将商品的基本信息(如商品ID、名称、价格等)存储在一个表中,将商品的销售信息(如销售量、库存等)存储在另一个表中。
  • 按访问频率进行划分:将经常被查询的列放在一个表中,将不经常被查询的列分开存储。例如,在一个博客平台中,可以将文章的基本信息(如标题、作者、发布时间等)存储在一个表中,将文章的内容(如正文、评论等)存储在另一个表中。
3. 示例:

假设有一个在线视频平台,需要设计用户信息存储的分库分表策略。

  • 水平划分:我们可以根据用户ID进行哈希分片。假设我们有3个分片,用户ID为1至10000的用户放在分片1,用户ID为10001至20000的用户放在分片2,以此类推。
  • 垂直划分:我们可以将用户信息按照访问频率进行划分。例如,将用户的基本信息(如用户名、密码、注册时间等)存储在一个表中,将用户的偏好信息(如观看历史、收藏列表等)存储在另一个表中。

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

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

相关文章

[RK3588-Android12] 调试MIPI-双通道-压缩屏(Video Mode/MIPI Dphy 8Lane/DSC 144HZ)

问题描述 被测屏幕:小米Pad6 分辨率:1800X2880 模式:Video Mode/MIPI Dphy 8Lane/DSC 144HZ PPS: 11 00 00 89 30 80 0B 40 03 84 00 14 01 C2 01 C2 02 00 01 F4 00 20 01 AB 00 06 00 0D 05 7A 06 1A 18 00 10 F0 03 0C 20 00 06 0B 0B 33…

SpringBoot+Prometheus+Grafana实现应用监控和报警

一、背景 SpringBoot的应用监控方案比较多&#xff0c;SpringBootPrometheusGrafana是目前比较常用的方案之一。它们三者之间的关系大概如下图&#xff1a; 关系图 二、开发SpringBoot应用 首先&#xff0c;创建一个SpringBoot项目&#xff0c;pom文件如下&#xff1a; <…

Sy6 编辑器vi的应用(+shell脚本3例子)

实验环境&#xff1a; 宿主机为win11&#xff0c;网络&#xff1a;10.255.50.5 6389 WSL2 ubuntu 目标机的OS&#xff1a;Ubuntu 内核、版本如下&#xff1a; linuxpeggy0223:/$ uname -r 5.15.146.1-microsoft-standard-WSL2 linuxpeggy0223:/$ cat /proc/version Linux vers…

MYSQL数据库:告别慢查询,优化性能大揭秘

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL应用》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 MYSQL数据库&#xff1a;告别慢查询&#xff0c;优化性能大揭秘 文章目录 一、揭秘…

Redis慢日志

SLOWLOG 是用来读取和重置 Redis 慢查询日志的命令&#xff0c;Redis 2.2.12 版本开始支持 1.Redis 慢查询日志概述 客户端从发送命令到获取返回结果经过了以下几个步骤&#xff1a; 1. 客户端发送命令 2. 该命令进入 Redis 队列排队等待执行 3. Redis 开始执行命令 - Red…

MySQL 数据库基础操作详解

文章目录 MySQL 数据库基础操作详解1. 基本概念2. 库的操作3. 表的操作4. 数据操作5. 示例示例一&#xff1a;创建表和插入数据示例二&#xff1a;查询数据示例三&#xff1a;更新数据示例四&#xff1a;删除数据 MySQL 数据库基础操作详解 MySQL 是一种常用的关系型数据库管理…

设计模式-结构型-享元模式Flyweight

享元模式的特点&#xff1a; 享元模式可以共享相同的对象&#xff0c;避免创建过多的对象实例&#xff0c;从而节省内存资源 使用场景&#xff1a; 常用于需要创建大量相似的对象的情况 享元接口类 public interface Flyweight { void operate(String extrinsicState); } 享…

计算机网络-TCP/IP 网络模型

TCP/IP网络模型各层的详细描述&#xff1a; 应用层&#xff1a;应用层为应用程序提供数据传输的服务&#xff0c;负责各种不同应用之间的协议。主要协议包括&#xff1a; HTTP&#xff1a;超文本传输协议&#xff0c;用于从web服务器传输超文本到本地浏览器的传送协议。FTP&…

计算机视觉之三维重建(5)---双目立体视觉

文章目录 一、平行视图1.1 示意图1.2 平行视图的基础矩阵1.3 平行视图的极几何1.4 平行视图的三角测量 二、图像校正三、对应点问题3.1 相关匹配法3.2 归一化相关匹配法3.3 窗口问题3.4 相关法存在的问题3.5 约束问题 一、平行视图 1.1 示意图 如下图即是一个平行视图。特点&a…

怎样在Linux搭建NTP服务器

搭建 NTP&#xff08;Network Time Protocol&#xff09;服务器可以帮助你在局域网内提供时间同步服务&#xff0c;让网络中的设备都使用统一的时间。以下是在 Linux 系统上搭建 NTP 服务器的基本步骤&#xff1a; 安装 NTP 服务器软件&#xff1a; 在终端中执行以下命令安装 N…

第二十章 红黑树

大家应该都接触过平衡二叉树(AVLTree)&#xff0c;了解到 AVL 树的性质&#xff0c;其实平衡二叉树最大的作用就是查找&#xff0c;AVL 树的查找、插入和删除在平均和最坏情况下都是 O(logn)。AVL 树的效率就是高在这个地方。如果在 AVL 树中插入或删除节点后&#xff0c;使得高…

JUC:synchronized优化——锁的升级过程(偏向锁->轻量级锁->重量级锁)以及内部实现原理

文章目录 锁的类型轻量级锁重量级锁自旋优化偏向锁偏向锁的细节偏向锁的撤销批量重偏向批量撤销锁消除 锁的类型 重量级锁、轻量级锁、偏向锁。 加锁过程&#xff1a;偏向->轻量级->重量级 轻量级锁 轻量级锁的使用场景&#xff1a;如果一个对象虽然有多线程要加锁&am…

HarmonyOS 应用开发之Actor并发模型对比内存共享并发模型

内存共享并发模型指多线程同时执行复数任务&#xff0c;这些线程依赖同一内存并且都有权限访问&#xff0c;线程访问内存前需要抢占并锁定内存的使用权&#xff0c;没有抢占到内存的线程需要等待其他线程释放使用权再执行。 Actor并发模型每一个线程都是一个独立Actor&#xf…

IDEA无法连接虚拟机中的Redis的解决方案,无法连接Jedis,无法ping通虚拟机的解决方案

首先&#xff0c;笔者先说明一下自身的情况&#xff0c;怎么连接都连不上&#xff0c;网上的教程全部都看了一遍&#xff0c;基本上没用得上的&#xff0c;这篇文章里面的解决方案包括了笔者能在网上找到了最全面的办法总结&#xff0c;最后终于是连上了 目录 一.连接Jedis出错…

大数据学习第十一天(复习linux指令3)

1、su和exit su命令就是用于账户切换的系统命令 基本语法&#xff1a;su[-] [用户名] 1&#xff09;-表示是否在切换用户后加载变量&#xff0c;建议带上 2&#xff09;参数&#xff1a;用户名&#xff0c;表示切换用户 3&#xff09;切换用户后&#xff0c;可以通过exit命令退…

数据结构——lesson12排序之归并排序

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

【CANN训练营笔记】AscendCL图片分类应用(C++实现)

样例介绍 基于PyTorch框架的ResNet50模型&#xff0c;对*.jpg图片分类&#xff0c;输出各图片所属分类的编号、名称。 环境介绍 华为云AI1s CPU&#xff1a;Intel Xeon Gold 6278C CPU 2.60GHz 内存&#xff1a;8G NPU&#xff1a;Ascend 310 环境准备 下载驱动 wget ht…

小折叠手机无法使用车上的无线充电?车和手机都没问题

最近看到一个案例——一位新入手Pocket 2的机主&#xff0c;发现自己的手机无法在车上进行无线充电。检查了手机和汽车都没问题&#xff0c;折腾大半天结果发现是电磁线圈没对准无线充电的位置。 无线充电的原理是手机的无线充电电磁线圈对准电磁线圈&#xff0c;通过电磁波感…

Wireshark TS | HTTP 传输文件慢问题

问题背景 之前有几篇文章写过关于应用传输慢的问题&#xff0c;延用之前的老套话&#xff0c;应用传输慢是一种比较常见的问题&#xff0c;慢在哪&#xff0c;为什么慢&#xff0c;有时候光从网络数据包分析方面很难回答的一清二楚&#xff0c;毕竟应用的定义范围实在太广&…

汽车租赁(源码+文档)

汽车租赁&#xff08;小程序、ios、安卓都可部署&#xff09; 文件包含内容程序简要说明含有功能项目截图客户端登录界面首页订单个人信息我的界面新手指引注册界面车型选择支付界面修改信息 管理端用户管理订单管理分类管理 文件包含内容 1、搭建视频 2、流程图 3、开题报告 …