4.MongoDB的readPreference模式
在读取数据的过程中我们需要关注以下两个问题:
- 从哪里读?关注数据节点位置
- 什么样的数据可以读?关注数据的隔离性
第一个问题则是有readPreference来解决
第二个问题则是由readConcern来解决
readPreference?
readPreference决定使用那一个节点来满足正在发起的读请求,可选值包括:
- primary:只选择主节点;(默认值)
- primaryPreferred:优先选择主节点,如果不可用则选择从节点
- secondary:只选择从节点
- secondaryPreferred:优先选择从节点,如果从节点不可用则选择主节点
- nearest:选择最近的节点
readPreference使用场景如下:
这里主要是以一个电商为例:
readPreference与tag
当复制集中有个多个secondary时,为了更加精准地控制读操作执行某个节点,可以利用tags属性给复制集节点设置标签,然后在应用程序的代码中通过连接字符串传入相应的参数,可以通过如下命令给节点设置标签,如下:
conf = rs.conf() conf.members[1].tags = {"city" : "GZ" } rs.reconfig(conf) ## 配置完了之后要使用该命令进行更新配置文件
如何配置readPreference
1.通过Mongodb的连接串参数:
mongodb://host1:27107,host2:27107,host3:27107/?replicaSet=rs&readPreference=secondary
2.通过MongoDB驱动程序API:
MongoCollection.withReadPreference(ReadPreference readPref)
3.Mongo shell
db.collection.find({}).readPref( "secondary" )
readPreference实验:从节点读
- 主节点写入{x:1},观察该条数据在各个节点均可见
- 在两个从节点分别执行 db.fsyncLock() 来锁定写入(同步)
- 主节点写入 { x:2 }
- db.test.find({a:123})
- db.test.find({a:123}).readPref("secondary") ##这里在我的实验中好像并不行,很奇怪。。。
- 解除从节点锁定 db.fsynUnlock()
- db.test.find({a:123}).readPref("secondary")
分类:
Monogo复制集
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理