读写分离

默认情况下,MongoClient 实例将查询发送到副本集的主要成员。

要使用副节点作为查询,以实现读写分离,我们必须更改读取首选项:

读取首选项在模块pymongo.ReadPreference下:

  • PRIMARY: 从主节点中读取(默认)
  • PRIMARY_PREFERRED: 优先从主节点读取,如果不可用则从副节点读取、
  • SECONDARY: 从副节点读取,如果副节点不可用,则抛出AutoReconnect异常。
  • SECONDARY_PREFERRED: 表示优先在副节点读取,如果不可用则从主节点读取。
  • NEAREST: 从任意可用节点中读。

实例:

import time

import pymongo

if __name__ == '__main__':
# 初始化客户端
# mongo_client = pymongo.MongoClient(host="127.0.0.1", port=27017, username="", password="")
mongo_client = pymongo.MongoClient(
host="127.0.0.1",
port=27017,
# 设置读取操作时的偏好,
# PRIMARY: 从主节点中读取(默认)
# PRIMARY_PREFERRED: 优先从主节点读取,如果不可用则从副节点读取、
# SECONDARY: 从副节点读取,如果副节点不可用,则抛出AutoReconnect异常。
# SECONDARY_PREFERRED: 表示优先在副节点读取,如果不可用则从主节点读取。
# NEAREST: 从任意可用节点中读。
read_preference=pymongo.ReadPreference.SECONDARY_PREFERRED
) # 延迟一下,因为MongoClient 构造函数是非阻塞的:
# 当客户端使用后台线程连接到副本集时,构造函数立即返回。
# 请注意,如果您创建客户端并立即打印其 nodes 属性的字符串表示形式,则列表最初可能为空。
# 如果稍等一下,MongoClient 会发现整个副本集:
time.sleep(1) # 打印所有节点
print(mongo_client.nodes) # 打印客户端的读取操作首选项
print(f"{mongo_client.read_preference=}") """
默认情况下,
Database 的读取首选项是从其 MongoClient 继承的,
Collection 的读取首选项是从其数据库继承的。 要使用不同的读取首选项,请使用 get_database() 方法或 get_collection() 方法: 也就是说你可以单独给某个db、集合来指定读取首选项!
""" db = mongo_client.get_database("spider", read_preference=pymongo.ReadPreference.PRIMARY_PREFERRED)
print(f"{db.read_preference=}") # 还可以通过with_options()方法来实现动态修改现有的db或者collection的读取首选项
db2 = db.with_options(read_preference=pymongo.ReadPreference.PRIMARY)
print(f"{db2.read_preference=}")
print(f"{db2=}") collection = db.get_collection("test02", read_preference=pymongo.ReadPreference.NEAREST)
print(f"{collection.read_preference=}") collection2 = collection.with_options(read_preference=pymongo.ReadPreference.SECONDARY)
print(f"{collection2.read_preference=}")
print(f"{collection2=}") mongo_client.close()

python操作mongodb实现读写分离的更多相关文章

  1. mongodb的读写分离

    转自:http://blog.csdn.net/sd0902/article/details/21538621 mongodb的读写分离使用Replica Sets来实现 对于replica set ...

  2. Python 操作 mongodb 数据库

    原文地址:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于 是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样 ...

  3. python操作mongodb

    # python操作mongodb # 首先,引入第三方模块pymongo,该模块是python用来操作mongodb的 import pymongo # 第二步,设置ip地址,以及表格名称,表格名字 ...

  4. 使用Python操作MongoDB

    MongoDB简介(摘自:http://www.runoob.com/mongodb/mongodb-intro.html) MongoDB 由C++语言编写,是一个基于分布式文件存储的开源数据库系统 ...

  5. python操作三大主流数据库(10)python操作mongodb数据库④mongodb新闻项目实战

    python操作mongodb数据库④mongodb新闻项目实战 参考文档:http://flask-mongoengine.readthedocs.io/en/latest/ 目录: [root@n ...

  6. python操作三大主流数据库(9)python操作mongodb数据库③mongodb odm模型mongoengine的使用

    python操作mongodb数据库③mongodb odm模型mongoengine的使用 文档:http://mongoengine-odm.readthedocs.io/guide/ 安装pip ...

  7. python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查

    python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...

  8. python操作三大主流数据库(7)python操作mongodb数据库①mongodb的安装和简单使用

    python操作mongodb数据库①mongodb的安装和简单使用 参考文档:中文版:http://www.mongoing.com/docs/crud.html英文版:https://docs.m ...

  9. MongoDB的安装与python操作MongoDB

    一.安装MongoDB 因为我个人使用的是windows,就只记录下windows下的安装 1.下载安装 就是官网,下载msi,选个路径安装 2.配置 看见别的地方说需要手动在bin同级目录创建dat ...

  10. python 操作mongoDB数据库

    网上关于python 操作mongoDB的相关文章相对不是很多,并且质量也不是很高!下面给出一个完整的 增删改查示例程序! #!/usr/bin/python # -*- coding: utf-8 ...

随机推荐

  1. iOS证书的使用

    在iOS开发中,证书分两种,一种是对应于应用的证书,一种是通用证书

  2. 文心一言 VS 讯飞星火 VS chatgpt (87)-- 算法导论8.2 4题

    四.用go语言,设计一个算法,它能够对于任何给定的介于0到 k 之间的 n 个整数先进行预处理,然后在 O(1)时间内回答输入的 n个整数中有多少个落在区间[a..b]内.你设计的算法的预处理时间应为 ...

  3. 使用KRPano资源分析工具强力加密JS文件

    本文地址:http://www.cnblogs.com/reachteam/p/6294767.html 软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278 ...

  4. Arrays.asList():使用指南

    Arrays.asList() 是一个 Java 的静态方法,它可以把一个数组或者多个参数转换成一个 List 集合.这个方法可以作为数组和集合之间的桥梁,方便我们使用集合的一些方法和特性.本文将介绍 ...

  5. 【逆向专题】【危!!!刑】(一)使用c#+Win32Api实现进程注入到wechat

    引言 自从上篇使用Flaui实现微信自动化之后,这段时间便一直在瞎研究微信这方面,目前破解了Window微信的本地的Sqlite数据库,使用Openssl,以及Win32Api来获取解密密钥,今天作为 ...

  6. Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘

    写在前面 Python中有许多有趣和强大的模块,其中一个非常有趣的模块就是pynupt.pynupt是基于pynput模块的一个封装,用于控制鼠标和键盘.它可以实现自动化操作和游戏外挂等功能. 本文将 ...

  7. 记一次 .NET某新能源MES系统 非托管泄露

    一:背景 1. 讲故事 前些天有位朋友找到我,说他们的程序有内存泄露,跟着我的错题集也没找出是什么原因,刚好手头上有一个 7G+ 的 dump,让我帮忙看下是怎么回事,既然找到我了那就给他看看吧,不过 ...

  8. 【RocketMQ】DLedger模式下的选主流程分析

    RocketMQ 4.5版本之前,可以采用主从架构进行集群部署,但是如果master节点挂掉,不能自动在集群中选举出新的Master节点,需要人工介入,在4.5版本之后提供了DLedger模式,使用R ...

  9. Vue框架快速上手

    Vue基础 vue指令 内容绑定 v-text 设置标签的内容一般通过双大括号的表达式{{ }}去替换内容 {{ hello }} v-html 与v-text类似区别在于html中的结构会被解析为标 ...

  10. Linux——Linux必备的基础知识总结

    文章目录 一.Linux操作系统概述 1.发展 2.组成 3.Linux的特性: 二.Linux操作系统安装 1.Linux的选择 2.安装Ubuntu Desktop 3.基本操作 三.Linux文 ...