读写分离

默认情况下,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. springboot下载文件 范围下载

    springboot下载文件 范围下载 关键词:springboot,download,Range,Content-Range,Content-Length,http code 206 Partial ...

  2. [错误] SQL logic error near "date": syntax error

    问题的来源 今天把一个项目的数据库从MySQL改到Sqlite 调试时发生了这个错误. 百度又看不懂英文(很多是国外发的), 就折腾了一下 原因 C# Sqlite 不能使用参数前缀"?&q ...

  3. Apache(2.4.49 2.4.50)--目录遍历--命令执行--(CVE-2021-42013)&&(CVE-2021-41773)

    Apache(2.4.49 2.4.50)--目录遍历--命令执行--(CVE-2021-42013)&&(CVE-2021-41773) 复现环境 采用Vulfocus靶场环境进行复 ...

  4. LeetCode 周赛上分之旅 #47 前后缀分解结合单调栈的贡献问题

    ️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越 ...

  5. Mybatiplus通用3.5.1版本及其以上的代码生成器工具类

    Mybatiplus通用3.5.1版本及其以上的代码生成器工具类 package com.gton.util; import com.baomidou.mybatisplus.annotation.F ...

  6. FX3U-3A-ADP模拟量和数字量之间转换

    简单的例子: 0-10V对应0-8,4-20mA对应0-30 以下是对上面例子的详解: 电压: 电压(0-10V) 0-10V对应着数字量0-4000 数字量与变频器HZ量之间的关系是(4000-0) ...

  7. 洛谷P2433 小学数学 N 合一

    写完了这道题结果脑子断电把浏览器关了......打开一看 没保存 寄 传送门:[深基1-2]小学数学 N 合一 - 洛谷 第一题 第二题 第三题 这几道题没啥好说的,直接输出就彳亍了 cout < ...

  8. studio

  9. Semantic Kernel .NET SDK 的 v1.0.0 Beta1 发布

    介绍 Semantic Kernel (SK) 是一个开源的将大型语言模型(LLM)与流行的编程语言相结合的SDK,Microsoft将Semantic Kernel(简称SK)称为轻量级SDK,结合 ...

  10. 23集训 Day4 数论

    快速幂 定义 快速幂,是一个在 \(\Theta(\log n)\) 的时间内计算 \(a^n\) 的小技巧,而暴力的计算需要 \(\Theta(n)\) 的时间. 解释 \[\because a^{ ...