当前位置: 首页 > news >正文

数据的复制

基本概念

数据的复制指的是通过网络链接的多台机器保留相同的副本

  • 为什么要进行数据的复制
    1. 使得用户和数据在地理上比较接近,因为大数据要求我们将计算安排在数据存放的位置和我们基本的内存模型不是很一样 ,比如磁盘调入内存之类的。
    2. 即使系统的一部分机器出现了故障,系统也能正常工作,这个指的是如果一个节点出现宕机,应该怎么处理才能使系统正常工作。
    3. 扩展可以接收读请求机器的数量,如果有很多个机器进行读,如果只有一个副本的话,那么系统就会发生崩溃,有点类似于DNS泛洪攻击的原理。

领导者和追随者的复制

我们这里假设的情景是基于领导者的复制或者是说主从库的复制。

  • 副本的概念:
    当有多个副本的时候我们会思考几个问题,当存储多个副本的时候如何确保所有的数据落到所有的副本上,就类似于通知从教学秘书下放到计算学部大群, 我们到底是采用让所有的同学向教学秘书确认他收到消息了才算下放完成,还是说让辅导员老师通知班长下放消息 然后反馈给教学秘书我已经全通知完了。
  • 同步和异步的优劣
    同步的好处是可靠性很高 但是缺点是消耗资源,异步的优点
    在这里插入图片描述
    我们发现follower1的复制是同步的 但是2的复制是异步的
  • 半同步
    实际上 数据库大多是采用半同步复制的策略,也就是上面的图展示的样子,指定一个主库,并且从中指定一个从库使得主库和从库的复制是同步的,主库和其他从库的复制是异步的。这样的好处是如果一个主库发生的宕机,那么我们指定好了一个新的主库之后就把这个同步的从库的内容直接复制过去就行了。
  • 半同步背景下,节点的加入节点的宕机复制日志的实现细节
    我们采用比较多的是半同步复制,那么我们不妨看下底层的具体是如何实现的

由于大数据具有实时性的特点,任何时候都可能发生数据的更新,所以我们从库拉取的数据也未必是最新的数据,我们的数据库需要进行如下处理:首先拉取主库的一致性快照,快照复制到新的从库节点,然后将这些快照复制到新的从库节点,之后从库连接主库,并拉取复制快照之后的所有变更,这样新的节点就赶上主库了。

系统中任何的节点都可能宕机:包括主库 从库1 从库n也就是大老板 小老板 打工人都有可能出现故障,如果是从库发生故障 那么解决的方法非常简单,就是和新加入的节点的方法类似,首先修好之后,从库连接主库,并拉取宕机之后的日志,完成追赶。。主库发生故障这个问题是非常棘手的,首先我们需要考虑选谁充当主库,这个可以通过选举产生,也就是统计相同副本数量的个数来选举其次有可能出现两个或者多个从库同时充当主库的情况(类似于汉高祖失去权力之后 各路诸侯纷争)这个时候就会出现一个脑裂的情况,解决方法很粗暴如果两个的话随机关闭一个。还有一个问题就是可能会存在冲突的写入,老领导回来之后可能会产生冲突的写入,避免冲突写入的方法就是忽略老节点的写入,但是这样会破坏数据的持久性写入的原则。
在这里插入图片描述

  • 日志的复制
    1. 基于语句的复制:主库想要写入什么内容,比如情景是关系数据库update或者是delete之类的语句,但是这样可能会产生一想不到的后果,比如我让你们寝室的人都去老师那签到,本来老师以为是239的人是小明和小方,但是这两个人串寝室了,所有结果是小红和小绿去老师那报道了,所以除非有特别确定的结果,基于语句的复制是不好的。
    2. 传输预写日志:缺点是需要和存储引擎打交道,时间开销比较大。
    3. 逻辑日志的复制:基于行的复制,有利于向后兼容不同的数据库存储软件。
    4. 基于触发器的复制:

复制的延迟

  • 复制的另外一个原因是适用于读多写少的情景,我们回顾一下 数据库更新的过程,如果一个客户想要往数据库写数据,首先发送请求给领导者,领导者收到数据之后写入其本地的存储,从库也被称作是只读副本,他不会直接读取数据,领导者将新的数据变更发送给所有的追随者,也就是复制日志记录,每个追随者拉取日志更新更新本地的数据库副本,那么就回到了我们数据复制的第三点原因,扩展可读机器的数量。

在这里插入图片描述

  • 最终一致性,在不发生错误的情况下 主库和从库数据保持一致性的状态叫做最终一致性。
  • 读己之写,我们写入数据库之后想要快速的看到自己的更新,一种方法是直接看自己从主库,看别人从其他的库读,第二种方法是检测状态。
    在这里插入图片描述

多主复制

  • 数据中心内部:采用主从复制的原则
  • 数据中心之间:采用多主复制的原则
    在这里插入图片描述
对比内容单主复制多主复制
出现故障时故障切换让数据中心的一个追随者成为领导者每个数据中心可以独立于其他数据中心运行,并且发生故障时的数据中心归队时复制会自动赶上
容忍网络敏感,因为写操作是同步的临时的网络中断不影响写入
应用场景离线的客户端

并发控制,当多个人写入的时候可能存在冲突解决的方法是加锁 或者是根据时间戳设置ID 或者是在读取的时候设置限制。

相关文章:

数据的复制

基本概念 数据的复制指的是通过网络链接的多台机器保留相同的副本 为什么要进行数据的复制 使得用户和数据在地理上比较接近,因为大数据要求我们将计算安排在数据存放的位置和我们基本的内存模型不是很一样 ,比如磁盘调入内存之类的。即使系统的一部分…...

【辐射场】3D Gaussian Splatting

三维高斯…喷喷 \, 3D Gaussian Splatting,下文简称3DGS,是好一段时间以来在三维内容创作和三维重建领域比较有热度的一项技术。 它属于基于图像的三维重建方法,意思就是你对现实物体或者场景拍照片,就能给你训练成一个场景模型&a…...

冒泡排序--------(C每日一题)

冒泡排序&#xff1a; 每次将相邻的两个数比较,将小的调到前头--升序 冒泡排序一个结论&#xff1a; n个数要进行n-1轮比较&#xff0c;第j轮要进行n-j次两两比较 循环体代码&#xff1a; int main() {int i, j,n,a[10],t;//n是几个数比较for(j1;j<n-1;j)//控制轮次for…...

每日一练:LeeCode-347. 前 K 个高频元素(中) - 【优先级队列】

本文是力扣LeeCode-347. 前 K 个高频元素 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode。 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输…...

<蓝桥杯软件赛>零基础备赛20周--第11周--贪心

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周。 在QQ群上答疑&#x…...

PowerShell Instal 一键部署TeamCity

前言 TeamCity 是一个通用的 CI/CD 软件平台,可实现灵活的工作流程、协作和开发实践。允许在您的 DevOps 流程中成功实现持续集成、持续交付和持续部署。 系统支持 Centos7,8,9/Redhat7,8,9及复刻系列系统支持 Windows 10,11,2012,2016,2019,2022高版本建议使用9系列系统…...

将“渴望“乐谱写入AT24C02并读出播放

#include <reg51.h> // 包含51单片机寄存器定义的头文件 #include <intrins.h> //包含_nop_()函数定义的头文件 #define OP_READ 0xa1 // 器件地址以及读取操作,0xa1即为1010 0001B #define OP_WRITE 0xa0 // 器件地址以及写…...

Vue独立组件开发-动态组件

文章目录 一、前言二、实现三、优化四、总结五、最后 一、前言 在开发中&#xff0c;你经常会遇到这么一种情况&#xff1a;根据条件动态地切换某个组件&#xff0c;或动态地选择渲染某个组件。 Vue 提供了另外一个内置的组件 <component> 和 is 特性&#xff0c;可以更…...

前端八股文(HTML篇)

目录 1.什么是DOCTYPE,有何用呢&#xff1f; 2.说说对html语义化的理解 3.src和href的区别&#xff1f; 4.title与h1的区别&#xff0c;b与strong的区别&#xff0c;i与em的区别&#xff1f; 5.什么是严格模式与混杂模式&#xff1f; 6.前端页面有哪三层构成&#xff0c;分…...

RivaGAN 水印项目

git地址 https://github.com/DAI-Lab/RivaGAN Dockerfile (/tools下文件为git下的文件) ############################################### # 使用 NVIDIA CUDA 10.0 开发环境作为基础镜像 FROM kaldiasr/kaldi:gpu-ubuntu18.04-cuda10.0 # 设置非交互式安装模式以避免某些命…...

Games101作业5

1.实现Renderer.cpp 中的 Render()&#xff1a;为每个像素生成光线 这里你需要为每个像素生成一条对应的光 线&#xff0c;然后调用函数 castRay() 来得到颜色&#xff0c;最后将颜色存储在帧缓冲区的相 应像素中。 我们要做的就是将屏幕空间下的坐标最后转换到世界空间的坐标…...

Golang解决跨域问题【OPTIONS预处理请求】

Golang解决跨域问题 前置知识&#xff1a;跨域问题产生条件及原因 跨域是是因为浏览器的同源策略限制&#xff0c;是浏览器的一种安全机制&#xff0c;服务端之间是不存在跨域的。 所谓同源指的是两个页面具有相同的协议、主机和端口&#xff0c;三者有任一不相同即会产生跨域…...

复试 || 就业day05(2023.12.31)算法篇

文章目录 前言找不同最长回文串找到所有数组中消失的数字下一个更大元素 I键盘行 前言 &#x1f4ab;你好&#xff0c;我是辰chen&#xff0c;本文旨在准备考研复试或就业 &#x1f4ab;文章题目大多来自于 leetcode&#xff0c;当然也可能来自洛谷或其他刷题平台 &#x1f4ab…...

Spring-4-代理

前面提到过&#xff0c;在Spring中有两种类型的代理&#xff1a;使用JDK Proxy类创建的JDK代理以及使用CGLIB Enhancer类创建的基于CGLIB的代理。 你可能想知道这两种代理之间有什么区别&#xff0c;以及为什么 Spring需要两种代理类型。 在本节中&#xff0c;将详细研究代理…...

设计模式:抽象工厂模式(讲故事易懂)

抽象工厂模式 定义&#xff1a;将有关联关系的系列产品放到一个工厂里&#xff0c;通过该工厂生产一系列产品。 设计模式有三大分类&#xff1a;创建型模式、结构型模式、行为型模式 抽象工厂模式属于创建型模式 上篇 工厂方法模式 提到工厂方法模式中每个工厂只生产一种特定…...

C语言中的Strict Aliasing Rule

文章目录 前言没有警告不代表没有问题目前的应对方法 前言 很久没写了&#xff0c;水一篇。 最近有个代码在gcc 4.8.5上编译失败。编译失败的提示是&#xff1a; error: dereferencing type-punned pointer will break strict-aliasing rules [-Werrorstrict-aliasing]查了下…...

单字符检测模型charnet使用方法,极简

Git链接 安装按照上面的说明&#xff0c;说下使用。 把tools下面的test做了一点修改&#xff0c;可以读取一张图片&#xff0c;把里面的单个字符都检测和识别出来。 然后绘制到屏幕上。 import torch from charnet.modeling.model import CharNet import cv2, os import num…...

Erlang、RabbitMQ下载与安装教程(windows超详细)

目录 安装Erlang 1.首先安装RabbitMQ需要安装Erlang环境 2.点击下载好的.exe文件进行傻瓜式安装,一直next即可 3.配置Erlang环境变量 安装RabbitMQ 1.给出RabbitMQ官网下载址&#xff1a;Installing on Windows — RabbitMQ&#xff0c;找到 2.配置RabbitMQ环境变量&#xff0…...

2023年终总结丨很苦,很酷!

文章目录 个人简介丨了解博主写在前面丨博主介绍年终总结丨博主成就年终总结丨博主想说年终总结丨学习芝士年终总结丨未来展望写在后面丨新年快乐 个人简介丨了解博主 主页地址&#xff1a;https://blog.csdn.net/m0_68111267 荣誉身份 ⭐2022年度CSDN 社区之星 Top6 ⭐2023年…...

鸿蒙 DevEco Studio 3.1 入门指南

本文主要记录开发者入门&#xff0c;从软件安装到项目运行&#xff0c;以及后续的学习 1&#xff0c;配置开发环境 1.1 下载安装包 官网下载链接 点击立即下载找到对应版版本 下载完成&#xff0c;按照提示默认安装即可 1.2 下载SDK及工具链 运行已安装的DevEco Studio&…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...