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

python中写monogo的uri参数里,为什么有多个IP,是连接多个服务器吗

问题来源:

代码如下:

from pymongo import MongoClientmongo_uri = "mongodb://admin:password@192.168.93.23:32725,192.132.9.35:32740,192.22.16.42:30538/?"
# 创建MongoClient实例
client = MongoClient(mongo_uri)

为什么uri中会存在多个IP地址呢, 是连接多个服务器吗?

根因定位:

在MongoDB中,当你在URI参数里看到多个IP地址,这通常意味着你正在连接到一个MongoDB副本集。副本集是MongoDB的一种部署方式,其中数据会被复制到多个服务器,这样的话,即使某个服务器出现故障,其他服务器上的副本也能保证数据的可用性和一致性。

这里是对MongoDB URI参数的简单解析:

mongodb:// 是协议部分,用来指定客户端需要使用的连接方法和协议。
admin:dsdsdsfsdfdsfdsa 是登录凭证,admin 是用户名,而 dsdsdsfsdfdsfdsa 是密码。
@192.168.93.23:32725,192.132.9.35:32740,192.22.16.42:30538 列出了副本集中的三个成员及其对应的端口号。这些是MongoDB服务器实例的地址,客户端将尝试连接到这些服务器。
/? 后面可以跟上连接选项,如副本集名称、连接超时时间等,但是在你给出的例子中并没有具体的连接选项

在连接到副本集时,客户端(你的Python应用程序)通常会自动查找并连接到主节点(primary),这是副本集中唯一可以进行写操作的节点。如果当前的主节点不可用,客户端会尝试连接到其他节点,并且副本集会自行选举一个新的主节点。

这样的部署方式提高了数据库的高可用性和故障转移能力。在你的Python代码中,使用这种带有多个IP地址的URI连接MongoDB副本集时,你的数据库驱动会处理与副本集中的各个成员之间的通信和故障转移。

什么叫MongoDB副本集

MongoDB副本集是MongoDB的一个特性,它提供了数据的高可用性和冗余。现在,让我们像给小学生解释一样来理解这个概念。假设你有一个非常重要的日记,你不希望它丢失或者被毁掉,因为它包含了你所有的秘密和冒险故事。为了保护这个日记,你决定做几个复制品。你把这些复制品放在家里不同的地方:一个在你的房间,另一个在客厅,还有一个在你的书包里。这样,即使有一天你的房间发生了灾难,比如说一场水灾,你的日记被毁了,你还有其他的副本可以回去查看那些宝贵的记忆。MongoDB的副本集就是类似的概念。它由一组MongoDB服务器组成,这些服务器上存有数据库的副本。通常,副本集包括一个主节点(Primary)和多个从节点(Secondary):主节点 —— 就像你的原始日记,是用来读写数据的地方。在副本集中,所有的数据变更(比如添加、更新或删除数据)首先发生在主节点上。从节点 —— 它们就像你的日记的复制品,它们复制主节点的数据。从节点通常用来读取数据,但它不能直接写入数据。如果主节点出了问题,其中一个从节点可以被提升为新的主节点,这样就可以继续读写操作而不会丢失数据。副本集中的数据复制是自动进行的。当主节点上的数据发生变化时,这些变化会被复制到从节点上,确保所有的节点都有最新的数据副本。

这种安排的好处是:

数据安全性 —— 因为有多份数据副本,所以即使一台服务器出现故障,数据也不会丢失。

高可用性 —— 如果主节点出现问题,副本集可以自动选择一个从节点来接替成为新的主节点,保证服务不中断。

读取扩展 —— 你可以从从节点读取数据,这样可以分散读取请求的负载,提高读取性能。

灾难恢复 —— 由于副本分布在不同的服务器上,即使某些服务器所在位置发生了灾难,其他的服务器仍然可以保持服务运行。

总之,MongoDB的副本集就像是你的日记的多个备份,无论发生什么,你都可以确保你的数据是安全的,并且服务始终可以使用。

相关文章:

  • FPS游戏漫谈System.GC.Collect()强制进行垃圾回收
  • HttpServlet详解
  • 【蓝桥杯单片机入门记录】动态数码管
  • IDEA启动Springboot报错:无效的目标发行版:17 的解决办法
  • 【java】使用springMVC优雅的响应数据
  • 【Spring连载】使用Spring Data访问 MongoDB(十一)----加密Encryption (CSFLE)
  • 【加密算法】AES对称加密算法简介
  • 基于smilehappiness-framework-base,快速集成ShardingSphere JDBC
  • 请求包的大小会影响Redis每秒处理请求数量
  • linux部署nginx
  • 【JavaEE】_tomcat的安装与使用
  • Android Gradle 开发与应用 (一) : Gradle基础
  • spring Boot快速入门
  • Java MP3转PCM
  • 一文读懂什么是HTTPS检查
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • Angular 响应式表单之下拉框
  • CentOS7 安装JDK
  • Git 使用集
  • Hibernate最全面试题
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • js算法-归并排序(merge_sort)
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • SpringCloud集成分布式事务LCN (一)
  • 分布式熔断降级平台aegis
  • 关于extract.autodesk.io的一些说明
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • (04)odoo视图操作
  • (C++17) optional的使用
  • (C语言)fread与fwrite详解
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (TOJ2804)Even? Odd?
  • (分布式缓存)Redis持久化
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (七)理解angular中的module和injector,即依赖注入
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)kafka实战——kafka源码编译启动
  • (一)插入排序
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • **PHP二维数组遍历时同时赋值
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net 调用php,php 调用.net com组件 --
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .NET企业级应用架构设计系列之应用服务器
  • @TableLogic注解说明,以及对增删改查的影响
  • [ Linux ] git工具的基本使用(仓库的构建,提交)