python操作mongodb实现读写分离
读写分离
默认情况下,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实现读写分离的更多相关文章
- mongodb的读写分离
转自:http://blog.csdn.net/sd0902/article/details/21538621 mongodb的读写分离使用Replica Sets来实现 对于replica set ...
- Python 操作 mongodb 数据库
原文地址:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于 是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样 ...
- python操作mongodb
# python操作mongodb # 首先,引入第三方模块pymongo,该模块是python用来操作mongodb的 import pymongo # 第二步,设置ip地址,以及表格名称,表格名字 ...
- 使用Python操作MongoDB
MongoDB简介(摘自:http://www.runoob.com/mongodb/mongodb-intro.html) MongoDB 由C++语言编写,是一个基于分布式文件存储的开源数据库系统 ...
- python操作三大主流数据库(10)python操作mongodb数据库④mongodb新闻项目实战
python操作mongodb数据库④mongodb新闻项目实战 参考文档:http://flask-mongoengine.readthedocs.io/en/latest/ 目录: [root@n ...
- python操作三大主流数据库(9)python操作mongodb数据库③mongodb odm模型mongoengine的使用
python操作mongodb数据库③mongodb odm模型mongoengine的使用 文档:http://mongoengine-odm.readthedocs.io/guide/ 安装pip ...
- python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查
python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...
- python操作三大主流数据库(7)python操作mongodb数据库①mongodb的安装和简单使用
python操作mongodb数据库①mongodb的安装和简单使用 参考文档:中文版:http://www.mongoing.com/docs/crud.html英文版:https://docs.m ...
- MongoDB的安装与python操作MongoDB
一.安装MongoDB 因为我个人使用的是windows,就只记录下windows下的安装 1.下载安装 就是官网,下载msi,选个路径安装 2.配置 看见别的地方说需要手动在bin同级目录创建dat ...
- python 操作mongoDB数据库
网上关于python 操作mongoDB的相关文章相对不是很多,并且质量也不是很高!下面给出一个完整的 增删改查示例程序! #!/usr/bin/python # -*- coding: utf-8 ...
随机推荐
- iOS证书的使用
在iOS开发中,证书分两种,一种是对应于应用的证书,一种是通用证书
- 文心一言 VS 讯飞星火 VS chatgpt (87)-- 算法导论8.2 4题
四.用go语言,设计一个算法,它能够对于任何给定的介于0到 k 之间的 n 个整数先进行预处理,然后在 O(1)时间内回答输入的 n个整数中有多少个落在区间[a..b]内.你设计的算法的预处理时间应为 ...
- 使用KRPano资源分析工具强力加密JS文件
本文地址:http://www.cnblogs.com/reachteam/p/6294767.html 软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278 ...
- Arrays.asList():使用指南
Arrays.asList() 是一个 Java 的静态方法,它可以把一个数组或者多个参数转换成一个 List 集合.这个方法可以作为数组和集合之间的桥梁,方便我们使用集合的一些方法和特性.本文将介绍 ...
- 【逆向专题】【危!!!刑】(一)使用c#+Win32Api实现进程注入到wechat
引言 自从上篇使用Flaui实现微信自动化之后,这段时间便一直在瞎研究微信这方面,目前破解了Window微信的本地的Sqlite数据库,使用Openssl,以及Win32Api来获取解密密钥,今天作为 ...
- Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
写在前面 Python中有许多有趣和强大的模块,其中一个非常有趣的模块就是pynupt.pynupt是基于pynput模块的一个封装,用于控制鼠标和键盘.它可以实现自动化操作和游戏外挂等功能. 本文将 ...
- 记一次 .NET某新能源MES系统 非托管泄露
一:背景 1. 讲故事 前些天有位朋友找到我,说他们的程序有内存泄露,跟着我的错题集也没找出是什么原因,刚好手头上有一个 7G+ 的 dump,让我帮忙看下是怎么回事,既然找到我了那就给他看看吧,不过 ...
- 【RocketMQ】DLedger模式下的选主流程分析
RocketMQ 4.5版本之前,可以采用主从架构进行集群部署,但是如果master节点挂掉,不能自动在集群中选举出新的Master节点,需要人工介入,在4.5版本之后提供了DLedger模式,使用R ...
- Vue框架快速上手
Vue基础 vue指令 内容绑定 v-text 设置标签的内容一般通过双大括号的表达式{{ }}去替换内容 {{ hello }} v-html 与v-text类似区别在于html中的结构会被解析为标 ...
- Linux——Linux必备的基础知识总结
文章目录 一.Linux操作系统概述 1.发展 2.组成 3.Linux的特性: 二.Linux操作系统安装 1.Linux的选择 2.安装Ubuntu Desktop 3.基本操作 三.Linux文 ...