首页 > 数据库 >python操作mongodb实现读写分离

python操作mongodb实现读写分离

时间:2023-07-17 12:14:01浏览次数:31  
标签:读取 python mongodb 读写 read preference print pymongo 节点

读写分离

默认情况下,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,读写,read,preference,print,pymongo,节点
From: https://www.cnblogs.com/juelian/p/17559714.html

相关文章

  • MongoDB副本集的搭建和管理(高可用)
    使得mongodb具备自动故障转移、高可用、读写分离。副本集默认情况下读写都只是通过主库,副节点只是备份数据而已,但是可以设置副节点允许读操作,这样就可以做成读写分离。使用pymongo的时候也可以设置,还可以动态设置库、集合的readPreference。详细的后面再写。。。如果主节点不可......
  • python学习_循环结构(while循环和for循环)
    一、什么叫循环结构?反复做同一件事情的情况,就要循环python中的循环结构主要有两种:1)while2)for-in 二、while循环只要条件成立,其包含的某条语句或某个语句块就会一直被执行,while循环与if语句的区别就是if语句是判断一次,条件为True就执行一次执行体,while循环是判断N+1次,条件......
  • Mongodb从入门到熟悉
    RDB:数据库→表(列)→行Mongo:数据库→集合→文档SQL和Mongodb的关系映射表(里面还有一些增删改查等等操作与SQL的对应的语句):https://www.mongodb.com/docs/manual/reference/sql-comparison/mongodb数据格式是以BSON(二进制json)存储的。https://www.mongodb.......
  • python操作mongodb基本使用
    使用pymongo,具体可以参考官方文档:语法上基本和原生mongodb是一样的,所以非常容易入手...https://pymongo.readthedocs.io/en/stable/tutorial.html日常使用importpprintimportpymongofrompymongo.collectionimportCollectionfrompymongo.databaseimportDatabasei......
  • Scrapy在pipeline中集成mongodb
    settings.py中设置配置项MONGODB_HOST="127.0.0.1"MONGODB_PORT=27017MONGODB_DB_NAME="bang123"pipelines.py:fromscrapy.pipelines.imagesimportImagesPipelinefromitemadapterimportis_item,ItemAdapterclassBang123Pipeline:......
  • python知识点
    anoldcat 博客园首页新随笔联系订阅管理随笔-66  文章-61  评论-7  阅读- 14万Python知识点大全(转载) 转载自:https://github.com/kenwoodjw/python_interview_question大佬总结得很好,本来我也想总结一个的,直到我看到了这个。。。额,我......
  • AnaConda 打包 python 程序为 exe
    1.打开AnacondaPrompt2.查看环境并激活condaenvlist##查看所有环境activateenv_name##激活对应环境3.进入程序所在对应windows目录4.打包主程序pyinstaller-Fxxxx.py##打包程序-F覆盖 ......
  • mongodb副本集ip调整
    环境:Os:Centos7mongodb:4.4.22调整顺序:从节点-->仲裁节点-->主节点源ip与新ip对应关系(这里只拿修改从库作为例子)192.168.107-->192.168.104从节点 1.关闭从节点/usr/local/services/mongodb/bin/mongolocalhost:29001myrepl:SECONDARY>useadminmyrepl:SECONDARY>db.......
  • python使用ctypes调用gcc编译的dll之下载mingw
    1、打开下载mingw的下载链接https://sourceforge.net/projects/mingw-w64/files/或者使用镜像网站下载http://files.1f0.de/mingw/2、根据自己电脑系统的版本下载相应64位或32位的mingw,红框中的包下载解压之后配置环境变量就可以使用了 3、将解压的mingw的路径添加环境变......
  • centos上安装python3.8+完整依赖
    1.拉取基础镜像centos7dockerpullcentos:72.创建容器dockerrun-itcentos:7/bin/bash3.安装基础环境yumupdate1.查看当前python版本[root@iZwz99sau950q2nhb3pn0aZ~]#pythonPython2.7.5(default,Aug72019,00:51:29)[GCC4.8.520150623(RedHat4.......