当前位置: 首页 > news >正文

11.MongoDB系列之连接副本集

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

欢迎关注公众号算法小生或沈健的技术博客shenjian.online

相关文章:

  • 大学生网站设计作品/58同城关键词怎么优化
  • 将网站的字体设计成百分比的形式要怎样定义/seo整站网站推广优化排名
  • 手机网站建设公司哪家好/北京企业推广
  • wordpress当前分类页面地址/房产网站模板
  • seo竞争对手网站分析/网页设计
  • 好的网页设计网站/百度首页优化排名
  • 电子与电路复习题重点大题(附答案)
  • 【精品】seata综合示例:订单-库存-扣款
  • Spring常用注解的详细介绍(包你学明白)
  • Torchtext快速入门(一)——Vocab
  • 34461A数字万用表参数
  • AI加速(四)| 衣柜般的分层存储设计
  • Linux格式化输出当前时间
  • c++类和对象中
  • ATT汇编总结_9_静态库与动态库
  • VS Code For Web 深入浅出 -- 导读篇
  • 设计模式(一)前言
  • MyBatis