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. 技术分享 | 测试git上2500星的闪回小工具

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1.实验环境 2.软件下载 3.开始测试 4.附参数说明 生产上发生误删数据或者误更新数据的事故时,传统恢复方法是利用备份 ...

  2. 利用 SonarScanner 静态扫描 Rainbond 上的 Maven 项目

    对代码进行静态扫描是一种非常常见的代码质量保证手段,这种扫描不仅仅可以检查到代码中的缺陷,应用各种业界最佳实践,也可以检查出安全方面的漏洞,给予项目代码全方位的提升.在各种代码扫描方案之中,Sonar ...

  3. Floyd算法详解

    Floyd本质上使用了DP思想,我们定义\(d[k][x][y]\)为允许经过前k个节点时,节点x与节点y之间的最短路径长度,显然初始值应该为\(d[k][x][y] = +\infin (k, x, ...

  4. 从零开始Blazor Server(10)--编辑角色

    例图 目前的样式是这样的: 其中角色在一个table里,然后可以增删改查,并且可以给指定的用户分配权限. 创建文件 首先我们在Pages/Admin目录下新建一个Role.razor.因为我们的Adm ...

  5. 演示RabbitMQ的交换类型

    一.Direct exchange 新建一个名为direct_exchange的Direct exchange 添加队列direct_queue1 添加队列direct_queue2 direct_e ...

  6. java方法---可变参数

    可变参数 在方法的声明中,在指定参数类型后面加一个...(省略号) 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,任何普通参数必须在它之前声明:

  7. ubuntu安装BricsCAD

    目录 目录 下载软件包 安装deb软件包 sudo dpkg -i *.deb 将Crack/bricsys.lic中hostid= <YOURHOSTID>替代本机MAC地址(中间不要冒 ...

  8. C++中的STL大法整理

    C++中的STL大法整理 由于碰到了一些不知道怎么用的STL vector vector是数组的STL,对于普通数组的优势就在于,可以动态地变化数组长度.那么面对一些数据范围非常大而又可以边读入边处理 ...

  9. php统计IP PV和今日访问量统计方法

    php引用,在wordpress主题中 $getroot=$_SERVER['DOCUMENT_ROOT']; require_once("$getroot/countstart.php&q ...

  10. KingbaseES V8R6备份恢复案例之---手工清理冗余历史备份

    案例说明: 对于KingbaseES V8R6的通过sys_rman执行的物理历史备份,可以在执行备份时,备份的保留(retention)策略自动清理.不能通过手工删除备份,可以通过expire参数手 ...