首页 > 数据库 >11.MongoDB系列之连接副本集

11.MongoDB系列之连接副本集

时间:2022-10-17 20:25:00浏览次数:80  
标签:11 副本 请求 students MongoDB collection import config 节点

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,副本,请求,students,MongoDB,collection,import,config,节点
From: https://www.cnblogs.com/shenjian-online/p/16800483.html

相关文章

  • 12.MongoDB系列之副本集管理
    1.控制成员状态1.1把主节点变为从节点rs.stepDown()1.2阻止选举如果需要对主节点维护,不想期间其他从节点选举为主节点,则可以rs.freeze(10000)维护完成后,只需要......
  • 14.MongoDB系列之配置分片
    1.启动服务器1.1启动配置服务器配置服务器是集群的大脑,保存着关于每个服务器包含哪些数据的所有元数据,因此,必须首先创建配置服务器。由于资源限制,在同一机器上启动三......
  • 13.MongoDB系列之分片简介
    1.分片概念分片是指跨机器拆分数据的过程,有时也会用术语分区。MongoDB既可以手工分片,也支持自动分片2.理解集群组件分片的目标之一是由多个分片组成的集群对应用程序......
  • 17.MongoDB系列之了解应用程序动态
    1.查看当前操作mongos>db.currentOp(){"inprog":[{"shard":"study","type":"op......
  • 16.MongoDB系列之分片管理
    1.查看当前状态1.1查看配置信息mongos>useconfig//查看分片mongos>db.shards.find(){"_id":"study","host":"study/localhost:27018,localhost:27019,loc......
  • 15. MongoDB系列之选择片键
    1.片键类型1.1升序片键升序片键通常类似于date或ObjectId--随着时间稳步增长的字段。这种模式通常会使MongoDB更难保持块的平衡,因为所有的块都是由一个分片创建的。1......
  • 2022年最新最全1100+JAVA服务端面试题
    ​Hash索引和B+树区别是什么?你在设计索引是怎么抉择的?描述下Redis的回收策略(淘汰策略)?描述下JVM类加载机制与对象的生命周期?为什么HashMap中String、Integ......
  • win11扯蛋的防火墙:远程桌面默认只添加了UDP端口规则
    win11扯蛋的防火墙:远程桌面默认只添加了UDP端口规则。开启防火墙后,导致win10以下的mstsc客户端无法访问。解决办法就是在防火墙高级设置,添加远程桌面端口(默认3389)的TCP......
  • 1100 校庆(JAVA)
    2019年浙江大学将要庆祝成立122周年。为了准备校庆,校友会收集了所有校友的身份证号。现在需要请你编写程序,根据来参加校庆的所有人士的身份证号,统计来了多少校友。输入格......
  • 1102 教超冠军卷(JAVA)
    “教育超市”是拼题A系统的一个衍生产品,发布了各种试卷和练习供用户选购。在试卷列表中,系统不仅列出了每份试卷的单价,还显示了当前的购买人次。本题就请你根据这些信息找......