iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >MongoDB中的数据复制到底是怎么实现的
  • 129
分享到

MongoDB中的数据复制到底是怎么实现的

2023-06-19 12:06:55 129人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关MongoDB中的数据复制到底是怎么实现的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。数据同步方式mongoDB中的复制功能主要是使用操作日志oplog.rs来实现的,

这期内容当中小编将会给大家带来有关MongoDB中的数据复制到底是怎么实现的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

数据同步方式

mongoDB中的复制功能主要是使用操作日志oplog.rs来实现的,oplog.rs包含了主节点的每一次写操作,oplog.rs是主节点中local数据库的一个固定集合,我们可以通过如下命令查看到:

use localshow tables

如下:

MongoDB中的数据复制到底是怎么实现的  

备份节点通过查询这个集合就知道要复制哪些数据,同时,每一个备份节点也都维护着自己的oplog.rs,自己的oplog.rs则用来记录每一次从主节点复制数据的操作,如此,每一个备份节点都可以再作为数据源提供给其他成员使用,如果某一个备份节点在使用的过程中挂掉了,那么当它重启之后,会自动从oplog.rs的最后一个操作开始同步。

上文我们也已经说过oplog.rs是一个固定集合,我们可以通过db.getCollection('oplog.rs').stats()这个命令来查看这个固定集合的属性,包括集合大小等,执行部分结果如下:

{    "ns" : "local.oplog.rs",    "size" : 18170305,    "count" : 177443,    "avGobjsize" : 102,    "storageSize" : 5902336,    "capped" : true,    "max" : -1,    "maxSize" : 1038090240,    "sleepCount" : 0,    "sleepMS" : 0,}

既然是固定集合,它里边能够保存的数据大小就是有限的。通常,oplog.rs使用空间的增长速度与系统处理处理写请求的速率近乎相同,比如主节点每分钟处理了1KB的写入请求,那么oplog.rs也可能会在一分钟内写入1KB条操作日志,但是如果主节点执行了批量删除的命令,比如下面这种:

db.c1.deleteMany({x:{$type:1}})

此时每一个受影响的文档都会产生一条oplog中的日志,这个时候oplog.rs中的日志会快速增加。

成员状态

到目前为止我们了解到的成员状态有两种,一个是PRIMARY,还有一个是SECONDDARY,成员状态的获取需要靠心跳来维护,副本集中的每一个成员每隔两秒就会向其他成员发送一个心跳请求,用来检查成员的状态,成员的状态主要有如下几种:

STARTUP

副本集中的成员刚刚启动时处于这个状态下,此时,MongoDB会去加载成员的副本集配置,配置加载成功之后,就进入到STARTUP2的状态。

STARTUP2

整个初始化同步过程都处于这个状态。

RECOVERING

这个状态是由STARTUP2状态来的,此时成员运转正常,但是此时还不能处理读取请求。

ARBITER

这是仲裁者所处的状态。

DOWN

当一个原本运行正常的成员无法访问到时,该成员就处于DOWN的状态。

UNKNOWN

如果一个成员无法到达其他任何成员,该成员就处于UNKNOWN状态,比如我们利用rs.add()方法添加一个不存在的成员,这个成员的状态就是UNKNOWN。

REMOVED

成员被从副本集中移除时就变成这个状态。

ROLLBACK

如果成员正在进行数据回滚,它就处于ROLLBACK状态,回滚结束后会转换为RECOVERING状态。

FATAL

当一个成员发生了不可挽回的错误时,且不再尝试恢复正常的话,就处于这个状态。

主节点转备份节点

通过如下命令可以让主节点转为备份节点:

rs.stepDown()

主节点转为备份节点之后会有新的主节点被选举出来,可以通过rs.status()来查看新的主节点。

rs.status()方法

前面我们已经多次使用过rs.status()方法,rs.status()方法会列出每个备份节点的含义,我们来看看这些参数的含义,先来列出一个rs.status()方法的返回值样例:

{"members" : [    {        "_id" : 1,        "name" : "192.168.248.135:27017",        "health" : 1,        "state" : 2,        "stateStr" : "SECONDARY",        "uptime" : 241,        "optime" : {                "ts" : Timestamp(1509881297, 1),                "t" : NumberLong(16)        },        "optimeDurable" : {                "ts" : Timestamp(1509881297, 1),                "t" : NumberLong(16)        },        "optimeDate" : ISODate("2017-11-05T11:28:17Z"),        "optimeDurableDate" : ISODate("2017-11-05T11:28:17Z"),        "lastHeartbeat" : ISODate("2017-11-05T11:28:18.073Z"),        "lastHeartbeatRecv" : ISODate("2017-11-05T11:28:18.769Z"),        "pingMs" : NumberLong(0),        "syncingTo" : "192.168.248.136:27017",        "configVersion" : 15    },    {        "_id" : 3,        "name" : "192.168.248.136:27017",        "health" : 1,        "state" : 1,        "stateStr" : "PRIMARY",        "uptime" : 250,        "optime" : {                "ts" : Timestamp(1509881297, 1),                "t" : NumberLong(16)        },        "optimeDate" : ISODate("2017-11-05T11:28:17Z"),        "electionTime" : Timestamp(1509881276, 1),        "electionDate" : ISODate("2017-11-05T11:27:56Z"),        "configVersion" : 15,        "self" : true    }]}

stateStr用来描述当前节点的状态。
2.uptime表示从成员可达到现在所经历的时间。
3.optimeDate表示每个成员的oplog中最后一个操作发生的时间。
4.lastHeartbeat表示当前服务器最后一次收到其他成员心跳的时间。
5.pingMs表示心跳从当前服务器到达某个成员所花费的平均时间。
6.syncingTo表示同步的数据源。
7.health表示该服务器是否可达,1表示可达,0表示不可达。

复制链问题

数据复制时可以从主节点直接复制,也可以从备份节点开始复制,从备份节点复制可以形成复制链,如果想禁止复制链,即所有的数据都从主节点复制,可以通过chainingAllowed属性来设置,具体步骤如下:

config=rs.config()config.settings.chainingAllowed=falsers.reconfig(config)

上述就是小编为大家分享的MongoDB中的数据复制到底是怎么实现的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: MongoDB中的数据复制到底是怎么实现的

本文链接: https://www.lsjlt.com/news/296106.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MongoDB中的数据复制到底是怎么实现的
    这期内容当中小编将会给大家带来有关MongoDB中的数据复制到底是怎么实现的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。数据同步方式MongoDB中的复制功能主要是使用操作日志oplog.rs来实现的,...
    99+
    2023-06-19
  • MongoDB数据库中怎么实现M-S主从复制
    本篇文章为大家展示了MongoDB数据库中怎么实现M-S主从复制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。[root@localhost ~]#&nb...
    99+
    2024-04-02
  • MongoDB怎么实现数据的强制同步
    在MongoDB中,数据的强制同步可以通过使用副本集(replica set)来实现。副本集是一组维护相同数据集的MongoDB实例...
    99+
    2024-04-19
    MongoDB
  • mongodb复制数据库的方法是什么
    MongoDB复制数据库的方法有两种:主从复制和副本集。1. 主从复制(Master-Slave Replication):主从复制...
    99+
    2023-09-12
    mongodb 数据库
  • PHP实现MongoDB数据库主从复制的方法
    在现代的网络应用程序中,数据处理和管理是至关重要的任务。随着Web应用程序变得越来越复杂,需要处理海量数据,存储和处理这些数据的数据库也越来越多了。MongoDB是一种NoSQL数据库,在Web应用程序中被广泛使用。与MySQL等关系型数据...
    99+
    2023-05-16
    PHP MongoDB 主从复制
  • 怎么使用PHP实现MongoDB数据库主从复制
    这篇文章主要介绍“怎么使用PHP实现MongoDB数据库主从复制”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用PHP实现MongoDB数据库主从复制”文章能帮助大家解决问题。MongoDB主...
    99+
    2023-07-06
  • Python实现将MongoDB中的数据导入到MySQL
    本文主要介绍了一个将 MongoDB 中的数据导入到 mysql 中的 python 工具类 MongoToMysql。该工具类实现了获取 MongoDB 数据类型、创建 MySQL 表结构以及将数据从 MongoDB ...
    99+
    2023-05-05
    Python实现MongoDB数据导入MySQL Python MongoDB数据导入MySQL Python MongoDB MySQL
  • SQL Server数据怎么复制到的Access
    这篇文章主要讲解了“SQL Server数据怎么复制到的Access”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL Server数据怎么复制到的Acc...
    99+
    2024-04-02
  • DM7数据复制中表级复制是怎样的
    DM7数据复制中表级复制是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。达梦数据复制(DATA REPLICATION)...
    99+
    2024-04-02
  • mongodb数据备份与恢复怎么实现
    要在MongoDB中实现数据备份和恢复,可以使用以下方法:备份数据:1. 使用mongodump命令来备份数据。该命令可以导出整个数...
    99+
    2023-10-20
    mongodb
  • sqllite数据库中怎么实现表复制
    这篇文章给大家介绍sqllite数据库中怎么实现表复制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.通过sql lite打开目的库,然后选中目的库右键,弹出有个date trans...
    99+
    2024-04-02
  • MongoDB中复制集的原理是什么
    这篇文章给大家介绍MongoDB中复制集的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。复制集简介Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primar...
    99+
    2024-04-02
  • 如何使用MongoDB实现数据的复制和分片功能
    如何使用MongoDB实现数据的复制和分片功能引言:MongoDB是一个十分流行的NoSQL数据库系统,它具有高性能、可扩展性和可靠性等特点。在大数据时代,数据量的增长是一种常态,因此数据的复制和分片成为了保证数据可靠性和性能的关键功能。本...
    99+
    2023-10-22
    MongoDB 数据复制 分片功能
  • php数组的底层是怎么实现的
    PHP是一门流行的编程语言,尤其是在Web开发中得到广泛应用。在PHP中,数组是一个非常重要的数据结构,可以用来存储和操作数据。然而,很多PHP开发者对数组的内部实现并不了解。本文将深入探讨PHP数组的底层实现,以帮助开发者更好地使用和优化...
    99+
    2023-05-19
  • MongoDB中怎么恢复误删的数据库
    这篇文章将为大家详细讲解有关MongoDB中怎么恢复误删的数据库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。方法一:通过 oplog 恢复如果部署的是 M...
    99+
    2024-04-02
  • 怎么在mongodb中删除重复的数据
    在mongodb中删除重复数据的方法:1.启动mongodb;2.登录mongodb数据库;3.使用数据库;4.为数据建立唯一索引实现去重;具体步骤如下:首先,在命令行中启动mongodb服务;net start MongoDBmongod...
    99+
    2024-04-02
  • mssql数据同步怎么实现数据复制
    本篇文章为大家展示了mssql数据同步怎么实现数据复制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 一 配置发布服务器 在发布服务器...
    99+
    2024-04-02
  • MySQL数据库中怎么实现多主复制
    这篇文章给大家介绍MySQL数据库中怎么实现多主复制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MySQL 管理每个复制通道,都是通过一个Master_info类(sql/rpl_m...
    99+
    2024-04-02
  • MySQL数据库中怎么实现复制操作
    MySQL数据库中怎么实现复制操作,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 MySQL数据...
    99+
    2024-04-02
  • MongoDB中复制选举的原理是什么
    这期内容当中小编将会给大家带来有关MongoDB中复制选举的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。MongoDB复制集的选举原理MongoDB复制的原理...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作