mongodb如何判断一次操作是否成功

【深度学习】肺结节分割项目实战二:分割肺实质 在后续训练模型的时候如果直接使用原始的肺部CT图像,其中的非肺区域会对训练造成干扰,因此我们需要提取分割肺实质。这一部分参考了kaggle上的教程。 从这张CT图像中可以看出扫描器以外的部分为黑色,背景和肺内部颜色较深,非肺组织和骨头颜色较浅。我们的目的是将肺部分割出来。由于肺部区域和其他部分对比明显,我们可以设置一个合适的阈值对图像中的区域进行隔离。 import argparse import os import numpy as np from medpy.filter.smoothing imp 阅读详情

MongoDB核心开发工程师 Kristina Chodorow(@kchodorow) 最近在她的博客上表示,她会发表一系列关于MongoDB Replica Sets相关的文章,向大家详细的进行一次 Replica Sets的知识培训。其系列文章内容包括下面一些章节:

本文主要对Replica Sets节点间的同步机制和同步协议进行了深入讲解。

同步过程

一个健康的secondary在运行时,会选择一个离自己最近的,数据比自己新的节点进行数据同步。选定节点后,它会从这个节点拉取oplog同步日志,具体流程是这样的:

  1. 执行这个op日志

  2. 将这个op日志写入到自己的oplog中(local.oplog.rs)

  3. 再请求下一个op日志

如果同步操作在第1步和第2步之间出现问题宕机,那么secondary再重新恢复后,会检查自己这边最新的oplog,由于第2步还没有执行,所以自己这边还没有这条写操作的日志。这时候他会再把刚才执行过的那个操作执行一次。那对同一个写操作执行两次会不会有问题呢?MongoDB在设计oplog时就考虑到了这一点,所以所有的oplog都是可以重复执行的,比如你执行 {$inc:{counter:1}} 对counter字段加1,counter字段在加1 后值为2,那么在oplog里并不会记录 {$inc:{counter:1}} 这个操作,而是记录 {$set:{counter:2}}这个操作。所以无论多少次执行同一个写操作,都不会出现问题。

w参数

当我们在MongoDB时执行一个写操作时,默认会直接返回成功,同时也可以通过设置w参数,指定这个写操作同步到几个节点后才返回成功。如下:

db.foo.runCommand({getLastError:1, w:2})

上面例子就是执行getLastError命令,使其在上一个写操作同步到两个节点上后再返回。不同的客户端可能在写法上不太一样,不过这个功能应该都是有的。对于重要数据,可以考虑采用这样的方式,通过牺牲一部分写性能来提升数据的安全性。

这个功能是如何实现的呢,primary节点是如何知道数据同步了几份呢?

在调用上面命令时,实际上MongoDB内部执行了如下的一些流程:

  1. 在primary上完成写操作

  2. 在primary上记录一条oplog日志,日志中包含一个ts字段,值为写操作执行的时间,比如本例中记为t

  3. 客户端调用{getLastError:1, w:2}命令等待primary返回结果

  4. secondary从primary拉取oplog,获取到刚才那一次写操作的日志

  5. secondary按获取到的日志执行相应的写操作

  6. 执行完成后,secondary再获取新的日志,其向primary上拉取oplog的条件为{ts:{$gt:t}}

  7. primary此时收到secondary的请求,了解到secondary在请求时间大于t的写操作日志,所以他知道操作在t之前的日志都已经成功执行了

  8. 这时候getLastError命令检测到primary与secondary都完成了这次写操作,于是 w:2 的条件满足了,返回给客户端成功

启动初始化

当一个新节点启动并加入到现在的Replica Sets中时,这时候新启动的节点会查看自己的oplog,通过一个叫 lastOpTimeWritten 的命令查找到它最近的一条写操作。这个命令你也可以随便在命令行执行:

> rs.debug.getLastOpWritten()

这个命令会返回一条oplog记录,其中的ts字段就是最近一次写操作的时间了。

如果你这个节点是全新的,没有数据,那么oplog里也没有数据,这时候节点会选择执行一次全量的同步。本文暂时不对全量同步的方法进行描述。

选择同步源节点

Replica Sets中的节点之间总在同步数据,但是他们不是通过传统的一主多从的方式来同步的。MongoDB的策略是选择一个合适的节点作为数据源。

首先secondary节点会通过ping的时间来确定其它节点与它的距离。时间越长的识为距离越远。然后通过下面方法确定其源节点:

for each member that is healthy: if member[state] == PRIMARY add to set of possible sync targets if member[lastOpTimeWritten] > our[lastOpTimeWritten] add to set of possible sync targetssync target = member with the min ping time from the possible sync targets

对于节点是否healthy的判断,各个版本不同,但是其目的都是找出正常运转的节点。在2.0版本中,它的判断还包括了salve delay这个因素。

你可以通过运行db.adminCommand({replSetGetStatus:1})命令来查看当前的节点状况,在secondary上运行这个命令,你能看到syncingTo这个字段,这个字段的值就是这个secondary的同步源。(其实名字应该是叫syncingFrom,但是由于版本兼容的原因,沿用了这个错误的名字)

链式同步结构

上面对w参数的实现,讲解上比较简单,只讲了w为2的情况,但是当w更大时,由于我们并不是采用一主多从的方式进行同步。所以情况会复杂一些。

比如我们有节点A,为primary节点,然后B节点为secondary节点,它从A节点同步数据,同时又有secondary节点C,它从同是secondary的B节点同步数据。这样A->B->C之间就形成了一个链式的同步结构。如果我们设定w为3,那么A节点如何能知道C节点已经从B节点同步成功了呢?

这是通过oplog同步协议来实现的,我们用通俗的语言来解释一下oplog的同步协议。

  • 当C从B同步数据时,C会在协议中对B说:我要从你这同步数据了,如果写操作有w参数的话,我的同步也算上吧。

  • 然后B会回答说:我不是一个primary节点,我会把你的这个计数转到我的同步源上去。

  • 然后B再对A打开一个新的连接,并且对A说:这个连接你就当成是C的吧,也算一个计数在w里。

  • 这时候在A看来,就有两个连接连到他上面,一个是B,一个是虚拟的C,这两个连接都能报告他说完成了同步操作。

当一个写操作在A上执行后,B首先同步到这个操作的oplog,执行完后会告诉A,我执行完了。然后C同样从B上获取到B的oplog,也执行了这一条写操作,然后他告诉B,我执行完了,B在收到这个响应后,会通过刚才开通的虚拟通道跟A说,我是虚拟的C节点,我也完成写操作了。这时候A就知道,A、B、C三个节点都完成写操作了。w:3的条件满足,然后返回给调用getLastError的客户端,完成这次操作。

具体三个节点间的连接如下图:

C B A <====> <====> <---->

B和A之间有两条通道,双线那条是真正的同步连接,单线那条是一个虚拟连接。

新功能展望

上面就是当前的Replica Sets同步的内部实现,在后续这一块还会进行一些新特性的开发。在2.2版本中,我们会提供replSetSyncFrom命令,让用户可以手动设置一个secondary的同步源。使用方法大概是这样:

> db.adminCommand({replSetSyncFrom:"otherHost:27017"})

文章来源:http://blog.nosqlfan.com/html/3944.html

transformer优化(一)-UNeXt 学习笔记 ​它在早期阶段使用卷积,在潜在空间阶段使用 MLP。通过一个标记化的 MLP 块来标记和投影卷积特征,并使用 MLP 对表示进行建模。 ​ 阅读详情

相关推荐

基于STM32的智能循迹小车设计(基础版)

基于STM32的智能循迹小车设计 硬件准备 1、小车底盘+四直流电机(带轮) 2、STM32F103C8T6核心板 3、12V 8700mAh锂电池(可以用几节18650锂电池) 4、循迹模块 选择的是TCRT500L,五路集成在一起,集成度比较高,但是可能不如五个单独的循迹模块好用 5、L298N电机驱动模块 四驱车为啥用L298N电机驱动模块? 可以把左边的两个电机并联,用输出A控制。把右边的两个电机并联,用输出B控制。 12V供电接电源正极,供电GND接电源负极和核心板GND,5V供电接核心

Rendezvous1的博客 3万+

mongodb 复制集之同步机制

MongoDB核心开发工程师 Kristina Chodorow(@kchodorow) 最近在她的博客上表示,她会发表一系列关于MongoDB Replica Sets 相关的文章,向大家详细的进行一次 Replica Sets的知识培训。其系列文章内容包括下面一些章节: Elections(选举)Creating a set(创建一个replica sets)Reconfig

韦远科的专栏 2849

滞回比较器电路详细分析

滞回比较器是一种用于检测两个不同电压值并使比较器输出高电平或低电平的电路。滞回比较器的特点是具有迟滞特性,即当输入电压高于某一阈值时,比较器输出高电平,当输入电压低于另一阈值时,比较器输出低电平,而在这两个阈值之间,比较器的输出保持不变。比较器通常有两个模拟电压输入端UIN+和UIN-以及一个数字状态输出端UOUT。当UIN+大于UIN-时,UOUT为高电平;当UIN+小于UIN-时,UOUT为低电平。根据具体的系统定义,这两种电位的具体数值可以有所不同。

LuDvei的博客 2万+

Python爬虫(三)-----第一个爬虫

Python爬虫(三)-----第一个爬虫 1.python的相应的爬虫模块 urllib模块 requests模块 2.requests模块 python中原生的一块基于网络请求的模块,功能非常强大,简单便捷,效率奇高 作用:模拟浏览器发送请求。 3.如何使用requests模块 指定url 发起请求 获取响应数据 持久化存储 4.环境准备 需要安装requests库 pip install reuqests 这个是从官网上下载库,由于国家的安全措施,我们可以使用国内源: 临时使用:

double_happy111的博客 1047

保姆级教程:在ROS Noetic下,手把手教你将自定义A*全局规划器打包成插件(附避坑指南)

本文提供了一份详细的ROS Noetic下自定义A*全局规划器插件开发指南,涵盖从环境准备、算法优化到插件配置与调试的全流程。通过实战案例和避坑技巧,帮助开发者高效实现机器人导航中的全局路径规划,特别适合需要优化ROS导航栈的开发者。

weixin_29168675的博客 284

HWDB1.1数据集处理全攻略:从gnt文件到PNG图片的完整转换教程

本文提供了HWDB1.1数据集处理的完整教程,详细解析了gnt二进制文件格式,并给出了从文件解析、标签映射到批量转换为PNG图片的Python脚本。教程涵盖了环境准备、跨平台解压方案,以及为PyTorch等深度学习框架准备数据的最佳实践,是进行手写汉字识别研究不可或缺的实用指南。

2w3e4r5t6y的博客 627

MongoDB入门

一、数据库(Database) 1.1 数据简介 数据库是按照数据结构来组织、存储和管理数据的仓库。 我们的程序都是在内存中运行的,一旦程序运行结束或者计算机断电,程序运行中的数据都会丢失。 所以我们就需要将一些程序运行的数据持久化到硬盘之中,以确保数据的安全性。而数据库就是数据持久化的最佳选择。说白了,数据库就是存储数据的仓库。 1.2 数据库分类 数据库主要分成两种: 1.2.1 关系型数据库(RDBMS) MySQL、Oracle、DB2、SQL Server... 关系数据库中全都是

Jak的博客 544

logisim实验六:MIPS运算器设计

实验目的 学生理解算术逻辑运算单元(ALU)的基本构成,掌握 Logisim 中各种运算组件的使用方法,熟悉多路选择器的使用,能利用前述实验完成的 32 位加法器、 Logisim 中的运算组件构造指定规格的 ALU 单元。 设计要求 利用前面实验封装好的 32 位加法器以及 logisim 平台中现有运算部件构建一个 32 位算术逻辑运算单元(禁用 Logisim 系统自带的加法器,减法器),可支持算术加、减、乘、除,逻辑与、或、非、异或运算、逻辑左移、逻辑右移、算术右移运算,支持常用程序状态标志(有符号

gyp0205的博客 2万+

<Zhuuu_ZZ>数据仓库

数据仓库一 Why二 What三 面向主题提取主题四 集成五 非易失六 随时间变化七 项目-基于物联网的物流数仓系统 一 Why 数据不兼容, 很难被整合 战略决策需要数据的分析 推荐系统 二 What 数据仓库是一个面向主题的、集成的、非易失的且随时间变化的数据集合 三 面向主题 主题(Subject)是在较高层次上将企业信息系统中的数据进行综合、归类和分析利用的一个抽象概念 每一个主题基本对应一个宏观的分析领域 在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象 例如“销售分析”

Zhuuu_ZZ的博客 1037

别再为镜面物体检测发愁了!手把手教你用PMD相位偏折术增强2.5D形状图细节(附Python代码)

本文详细解析了PMD相位偏折术在工业视觉中镜面物体检测的应用,通过2.5D成像方案增强形状图细节。文章提供了Python代码示例,介绍了一种计算高效的局部特征增强算法,帮助解决产线环境中的噪声问题,提升缺陷识别准确率。

weixin_29299807的博客 346

单细胞双胞过滤-scrublet安装

pip install scrublet ----use-pep517有如下报错,分析可知安装annoy时不会自动更新gcc的版本,centos默认是4.8.5。pip install scrublet ----use-pep517 仍然报错,但似乎不影响使用,提示Successfully installed。打开终端,进入Python环境,输入以下代码,查看Python安装位置。暂时还没尝试是否存在问题,如果存在问题,降级scrublet版本。包的开发依赖的是比较低版本的numpy,会用到。

hzau_t的博客 792

pymongo 怎么判断数据有没有添加成功_Python操作MongoDB数据库(一)

前言干货文章继续出发!隔的时间有些久了哈,对 MongoDB 安装回顾的同学,可以看下windows环境 《初识 MongoDB 数据库》。这篇文章结尾处,介绍到使用图形化界面来创建了 MongoDB 的库,表,以及数据。今天这篇文章,来带你来玩一玩,如何使用 Python 操作 MongoDB 数据库。MongoDB基础概念为了有一个良好的学习体验,再操作之前简单的理解下 MongoDB 的基础...

weixin_39922374的博客 1457

技术文档的语言表达:简洁、准确与易懂的平衡艺术

技术文档的语言表达不仅要简洁、准确,还需要能够打破技术壁垒,使不同背景的读者都能理解。这是一项需要技巧和经验的工作,它要求技术作者既要具备扎实的专业知识,又要具备清晰的表达能力。通过不断打磨语言的简洁性、准确性和易懂性,我们能够创造出一份高质量的技术文档,让知识的传递不再受限于语言的障碍。

人心有反复,好在山水有重逢。 4677

如何检查mongoClient 是否连接成功 mongoDB C# Driver

mongoDB 连接服务支持两种模式:验证连接和超级管理员连接      一般情况下,mongoDB 默认支持超级用户连接,及用户无须进行验证,即可对mongoDB 下的所有库进行操作。       验证链接,见小白的博客:mongoDB 验证连接设置和注意事项。 ================================================================...

m0_37867491的博客 9160

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

mongodb 判断Collection是否存在

MongoDB: 判断 Collection 是否存在 MongoDB 是一种广泛使用的 NoSQL 数据库,因其高性能和灵活性受到许多企业的青睐。在使用 MongoDB 时,通常需要判断一个 Collection 是否存在,这对于避免在操作数据库时出现错误是非常重要的。本文将详细介绍如何判断 Collection 是否存...

weixin_40966837的博客 434

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

WIndow中MongoDB下载及检测其是否启动成功

MongoDB的下载 在官网:https://www.mongodb.com/download-center?jmp=homepage#community下载个.msi安装包速度炒鸡慢,建议在 http://dl.mongodb.org/dl /的Win32 / x86_64的需要下载的 检测其是否启动成功 工作前期 下载完成后,进入的MongoDB的安装目录,

blue_zeno的博客 6071

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java mongodb 怎么判断存储的是否为文件

Java mongodb 怎么判断存储的是否为文件 在使用 Java 操作 MongoDB 数据库时,有时候我们需要判断存储在数据库中的数据是否为文件。在 MongoDB 中,文件通常以二进制数据的形式存储,因此我们可以通过判断数据的类型和内容来确定是否为文件。 判断文件存储的逻辑 查询数据库中的数据 判断数据类型是否为...

weixin_42016520的博客 116

MONGODB 内存使用分析与判断内存是否缺少

MONGODB 实例的内存使用率是一个非常重要的指标,内存使用率过高会导致MONGODB 实例的内存溢出,本文主要通过查看MONGODB的实例内存的使用率得方法,使MONGODB的使用者尽快发现内存方面出现的问题,提早进行相关的应对。在MONGODB启动后,我们都知道不光加载了二进制中的文件到内存中,同时负责内存的分配和释放的工作,如各个客户端连接和请求,默认的情况下MO...

sql server的专栏 1106

mongoDB操作完数据库是否需要断开

主要论证,mongoDB是否需要在操作数据库之后关闭与数据库的连接。

weixin_46560512的博客 4392

mongodb 集合是否存在

我整理的一些关于【数据】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/eDOcp1如何判断 MongoDB 集合是否存在 MongoDB 是一个面向文档的 NoSQL 数据库,它以灵活的数据模型和高性能而闻名。在日常的数据库操作中,有时我们需要检查某个集合(相当于关系数据库...

weixin_28870939的博客 331

记一次MongoDB的重启操作

背景 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 解决方案 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的

weixin_38888144的博客 1万+

MONGODB 内存使用分析与判断内存是否缺少

此文重新发送的主要原因是,经过MONGODB 中文社区内容联席主席的指导下发现部分问题,进行修改,重新发送,修改问题的位置,已经标记成粗体。MONGODB 实例的内存使用率是一个非常重要的指标,内存使用率过高会导致MONGODB 实例的内存溢出,本文主要通过查看MONGODB的实例内存的使用率得方法,使MONGODB的使用者尽快发现内存方面出现的问题,提早进行相关的应对。...

sql server的专栏 2031

Linux安装MongoDB(按步骤,一次成功)

目录 一、安装mongoDB安装包 二、配置 三、启动服务端 四、启动客户端 五、关闭服务端 六、关闭客户端 一、安装mongoDB安装包 1. cd /usr/local 2. mkdir mongodb 3. cd mongodb 4. wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.7.tgz 5. tar -zxvf mongodb-linux-x86_64-4.0.7.tgz 6. cd...

ZwLemon 1万+

如何确认mongodb数据插入是否成功_【扩展篇】MongoDB03——MongoDB对于文档的增删改查操作...

大家好啊,今天继续更新有关MongoDB的操作,这一次就是很重要的增删改查了,之前学MySQL的时候,这些操作就是一个重点,有了增删改查一个死气沉沉的数据库才会有了生机,才会有它存在的价值。在开始之前,先向大家说明一个问题,那就是关于推送的评论,根据有关国家有关规定2018年12月份以后申请的公众号没有开放评论的功能。这就让安安子很苦恼啊。安安子也想知道小伙伴们都有哪些有意...

weixin_39615808的博客 1223

如何确认mongodb数据插入是否成功_go连接mongodb

mongodb介绍mongodb是基于分布式文件存储的数据库,一条数据存储为一个文档document,数据结构是由key-value对组成,文档类类似于平时使用的json对象。文档中字段值可以包含其他的文档,数组以及文档数组。mongodb和sql对比mongodb术语说明MySQL术语database数据库databasecollection集合/表tabledocument文档/行r...

weixin_39950010的博客 812

mongodb启动成功连不上_记一次mongodb启动不了的解决方法

启动不了,分别报错如下:ERROR: child process failed, exited with error number 1ERROR: child process failed, exited with error number 511,第一次尝试启动mongod,报错,取消执行,ai-learning-mongo-1-[root@ai-learning-mongo-1 mongodb...

weixin_29466397的博客 1440
上一篇: python连接mongodb
下一篇: mongo的常用操作
CsharpGame
博客等级 码龄21年 11粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值