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. 兔起鹘落全端涵盖,Go lang1.18入门精炼教程,由白丁入鸿儒,全平台(Sublime 4)Go lang开发环境搭建EP00

    Go lang,为并发而生的静态语言,源于C语言又不拘泥于性能,高效却不流于古板,Python灵活,略输性能,Java严谨,稍逊风骚.君不见各大厂牌均纷纷使用Go lang对自己的高并发业务进行重构, ...

  2. Flask像Jenkins一样构建自动化测试任务

    flask这个框架很轻量,做一些小工具还是可以很快上手的. 1.自动化 某一天你入职了一家高大上的科技公司,开心的做着软件测试的工作,每天点点点,下班就走,晚上陪女朋友玩王者,生活很惬意. 但是美好时 ...

  3. Docker 12 数据卷

    参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...

  4. 业界压测平台与JMeter的对比

    压测平台是什么? 压测,即压力测试,作用是对各种服务对象进行压力测试以获得该服务处于或超过预期负载时系统的运行情况,进而判断系统在峰值负载或超出最大负载情况下的处理能力. 压测工具,顾名思义,就是用来 ...

  5. Mybatis介绍、使用IDEA快速入门

    1. Mybatis概念 MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发 JavaEE三层架构:表现层.业务层.持久层 JDBC 与 MyBatis 对比: MyBatis 本是 A ...

  6. 744. 寻找比目标字母大的最小字母--LeetCode

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/find-smallest-letter-greater-than-target 著作权归领扣网络所有. ...

  7. 老梗新玩「GitHub 热点速览 v.22.34」

    作者:HelloGitHub-小鱼干 不知道你是否和我有一样的烦恼,最近的流行梗当自己要用拿来造词时,就陷入了不知道咋"换壳"的尴尬地步.sao-gen-gen 大大减少了你老梗新 ...

  8. 【读书笔记】C#高级编程 第二章 核心C#

    (一)第一个C#程序 创建一个控制台应用程序,然后输入代码,输入完毕后点击F5 Console.WriteLine();这条语句的意思:把括号内的内容输出到界面上: Console.ReadKey() ...

  9. dp-位移模型(数字三角形演变)

    由数字三角形问题演变而来下面的题: https://www.cnblogs.com/sxq-study/p/12303589.html 一:规定位移方向 题目: Hello Kitty想摘点花生送给她 ...

  10. Java 多线程:并发编程的三大特性

    Java 多线程:并发编程的三大特性 作者:Grey 原文地址: 博客园:Java 多线程:并发编程的三大特性 CSDN:Java 多线程:并发编程的三大特性 可见性 所谓线程数据的可见性,指的就是内 ...