1. Python连接副本集
from pymongo import MongoClient
from bson.codec_options import CodecOptions
from retry import retry
import pytz
import pandas as pd class MongoDbClient: def __init__(self, uri):
self.mongoClient = MongoClient(uri) @retry(tries=1, delay=5)
def get_collection(self, db, collection):
return self.mongoClient.get_database(db).get_collection(collection) \
.with_options(codec_options=CodecOptions(tz_aware=True, tzinfo=pytz.timezone('Asia/Shanghai'))) MONGO_CLIENT = MongoDbClient("mongodb://127.0.0.1:27019/?connectTimeoutMS=60000&socketTimeoutMS=10000000") students_conn = MONGO_CLIENT.get_collection('study', 'students') df = pd.DataFrame(list(students_conn.find({}).batch_size(1000)))
print(len(df))
2. 写入时等待复制
db.students.insertOne({'username': 'liuyifei'}, {writeConcern: {'w': 'majority', 'wtimeout': 100}})

通过majority,只有写操作被复制到副本集中大多数成员后,服务器才会进行响应

{
"acknowledged": true,
"insertedId": ObjectId("62cd861c01440000150028d4")
}
3. 自定义复制保证规则
var config = rs.config()
// 设置节点标签表示北京、上海数据中心
config.members[0].tags = {"dc": "sh"}
config.members[1].tags = {"dc": "sh"}
config.members[2].tags = {"dc": "bj"}
// 第一次时设置{}
config.settings = {}
// 2表示在2个分组中,每组至少写入一台服务器
config.settings.getLastErrorModes={"eachDc": {"dc": 2}}
rs.reconfig(config)

现在可以在可操作中应用这条规则

db.students.insertOne({'username': 'liuyan'}, {writeConcern: {'w': 'eachDc', 'wtimeout': 100}})
4. 将读请求发送到从节点

默认情况下,驱动程序会将所有请求路由到主节点。但某些情况下从节点读取还是有意义的。

4.1 一致性考虑

对一致性读取要求非常高的应用程序不应该从从节点读取数据。若不高可以考虑

4.2 负载考虑

当为了从节点承担系统的负载时,可以考虑从节点读取。

4.3 由从节点读取数据的场景

当主节点发生故障仍然希望能够执行读操作。当失去主节点时,副本集会进入一个临时的只读模式。这种读偏好叫做primaryPreferred.

如果从节点可用,则读偏好secondary总是将读请求发送给从节点,没有可用从节点,则会出现错误,不会将读请求发送给主节点,而读偏好secondaryPreferred也将读请求发送给从节点,但没有可用从节点时会将请求发送给主节点

应该根据应用程序的需求来考虑哪些选项更合适。

  • 如果读请求必须从主节点读取数据,则使用primary
  • 如果读请求不要求数据是最新的,则使用primaryPreferred
  • 如果读请求低延迟需求大过一致性需求,则使用nearest

欢迎关注公众号算法小生沈健的技术博客

11.MongoDB系列之连接副本集的更多相关文章

  1. 8.MongoDB系列之创建副本集(一)

    1. 复制简介 在MongoDB中,创建副本集后就可以使用复制功能了,副本集是一组服务器,其中一个是用于处理写操作的主节点,还有多个用于保存主节点的数据副本的从节点,如果主节点崩溃了,则从节点会从中选 ...

  2. MongoDB系列之三(副本集配置)

    今天我测试了一下MongoDB的副本集的配置. 首先从概念上说一下MongoDB副本集和主从复制的区别.其实副本集(Replica Set)是主从复制的高级形式.高级在哪里呢?主动复制实现了数据备份+ ...

  3. mongodb 系列 ~ mongo的副本集(3)

    一 简介:今天咱们来聊聊mongodb复制的具体一些案例 二 副本集 1 当mongodb采用全量复制时,如何观察全量复制的进度 对比文件本身和primary大小 2 mongodb全量复制的过程 旧 ...

  4. 9.MongoDB系列之创建副本集(二)

    1. 如何设计副本集 大多数:选取主节点时需要由大多数决定,主节点只有在得到大多数支持时才能继续作为主节点,写操作被复制到大多数成员时就是安全的写操作.这里的大多数定义为"副本集中一半以上的 ...

  5. mongodb 系列 ~ mongo的副本集(2)

    一 简介:来试试更改副本集的oplog问题二 背景: oplog的作用类似于mysql的binlog,传递增量操作到从节点 三 oplog介绍   1 oplog在local库:      1 mas ...

  6. Mongodb3.0.5副本集搭建及spring和java连接副本集配置

    这是去年写的一篇文档,最近突然发现并没有发不出来,因此现在补上,希望能对某些朋友有所帮助.因为当时记录时没有截图,因此这里看起来可能就比较单调. 一.基本环境: mongdb3.0.5数据库 spri ...

  7. MongoDB 带访问控制的副本集部署

    当你需要用到一个MongoDB 副本集集群,用于开发测试时, 可以通过下面的步骤简单完成. 版本及环境 MongoDB4.4  Centos6.5  一. 下载安装 MongoDB Server 及 ...

  8. MongoDB 删除,添加副本集,并修改副本集IP等信息

    MongoDB 删除,添加副本集,并修改副本集IP等信息 添加副本,在登录到主节点下输入 rs.add("ip:port"); 删除副本 rs.remove("ip:po ...

  9. MongoDB副本集配置系列五:副本集的在线迁移

    MongoDB副本集的在线迁移 查看当前集群的状态: { "setName" : "gechongrepl", "setVersion" : ...

随机推荐

  1. Golang 汇编asm语言基础学习

    Golang 汇编asm语言基础学习 一.CPU 基础知识 cpu 内部结构 cpu 内部主要是由寄存器.控制器.运算器和时钟四个部分组成. 寄存器:用来暂时存放指令.数据等对象.它是一个更快的内存. ...

  2. (WebFlux)002、如何打印日志与链路ID

    一.背景 最近在持续改造项目,想通过日志查看用户所有的接口链路日志.在原来基于SpirngMVC的时候,那是比较好处理的,通过ThreadLocal,放入TraceId,就可以把一个TraceId传到 ...

  3. LuoguP4219 [BJOI2014]大融合(LCT)

    早上考试想用\(LCT\)维护联通块\(size\),现在才发现\(LCT\)的\(size\)有虚实之分 \(Link\)与\(Acess\)中虚实变,干他丫的 \(Splay\)中只是相对关系,没 ...

  4. java学习第四天高级数组.day13

    正则表达式 冒泡排序 二分法查找 线性查找:从头找到尾,性能比较低. 二分法查找(折半查找):前提数组元素是有序的,性能非常优异. Arrays

  5. 虚拟DOM解析及其在框架里的应用

    虚拟DOM解析及其在框架里的应用 浏览器是怎样解析HTML并且绘出整个页面的 上图为webkit引擎浏览器的处理流程,如上图大致分为4大步: 第一步,HTML解析器分析html,构建一颗DOM树: 第 ...

  6. tty的crash分析

    crash> btPID: 410629 TASK: ffff883fea379fa0 CPU: 10 COMMAND: "jupyter-lab"#0 [ffff8823c ...

  7. 教程 - 深度探讨在 Vue3 中引入 CesiumJS 的最佳方式

    目录 1. 你应该先知道的基础知识 1.1. CesiumJS 的库构成 1.2. 选择 Vite3 和 pnpm 的理由 1.3. 使用 External 模式引入静态库 - 不打包静态库 1.4. ...

  8. 「题解报告」SP16185 Mining your own business

    题解 SP16185 Mining your own business 原题传送门 题意 给你一个无向图,求至少安装多少个太平井,才能使不管那个点封闭,其他点都可以与有太平井的点联通. 题解 其他题解 ...

  9. 银河麒麟v4_sp4安装英伟达驱动

    bios设置视频输出为auto模式 视频线插独立显卡上 先dpkg 安装两个deb包 1.禁用开源驱动:sudo vim /etc/modprobe.d/blacklist.conf,在里面添加 bl ...

  10. EntityFrameworkCore 模型自动更新(下)

    话题 上一篇我们讨论到获取将要执行的迁移操作,到这一步为止,针对所有数据库都通用,在此之后需要生成SQL脚本对于不同数据库将有不同差异,我们一起来瞅一瞅 SQLite脚本生成差异 在上一篇拿到的迁移操 ...