7.MongoDB之读策略readPreference

本文详细介绍了MongoDB中readPreference的使用方式及其对分布式数据库的影响。主要包括:readPreference的多种模式及其实现原理,如何配置以实现数据隔离和读策略多样化,以及不同模式下对系统性能的具体影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考官网这里:

Connection String URI Format — MongoDB Manual

Read Preference — MongoDB Manual

对于分布式数据库(多节点),更好的实现数据隔离、以及数据读策略的多样化。

1、readPreference

readPreference 主要控制客户端driver从副本集(Replica Set)读数据的时候如何路由,如下图。这个特性可以方便的配置读写分离、就近去读等策略。

各个配置的含义如下:

(1)primary:只主(默认模式)。只从primary节点读数据。

(2)primaryPreferred:先主后从。优先从primary读取,primary不可用时从secondary读。

(3)secondary:只从。只从副本集中secondary节点读数据。

(4)secondaryPreferred:先从后主。优先从secondary读取,如果secondary不可用时就从primary读。

(5)nearest:就近。根据网络距离,就近读取,根据客户端与服务端的PingTime是实现。

2、使用readPreference需要知道的一些点

(1)除了primary模式以外的其他模式可能返回的数据都不是那么实时,因为从primary进行副本操作到secondary是异步操作。因此在你选中primary以外模式的时候请确保你的程序能够忍受这种stale(不新鲜)。

(2)当然也可以通过设置一些选项(如maxStalenessSeconds)来避免从secondary节点读出来的数据过于“stale”。

        该选项不适应于primary模式,这个比较好理解只有选择从节点成员读取操作才能应用。当选择使用maxStalenessSeconds进行读操作,客户端会通过比较从节点和主节点的最后一次写时间来估计从节点的过期程度;客户端会把链接指向估计落后小于等于maxStalenessSeconds的从节点。另外需要注意的是选项值要大于等于90秒,较小的值可能会刨异常。客户端通过定期检查每个副本集成员的最后一次写操作时间估计过期程度,因为检查不频繁,所以只是一个相对粗略的估计。

3、readPreference的使用

(1)通过mongodb连接串参数指定

mongodb://mongouser:qiyeqq%40mongo@11.222.6.220:27017/?readPreference=secondaryPreferred

(2)mongodb驱动程序API

MongoCollection.withReadPreference(ReadPreference readPref)

(3)mongo shell

db.collection.find().readPref(“secondary”)

4、配置效果

(1)不配置的情况下默认是只从primary读。其效果是压测的时候primary节点cpu特别高,但secondary节点cpu几乎没有占用。显然资源没有得到充分利用,压出来的qps不好看。

(2)配置readPreference后从节点的cpu占用瞬间上来了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

焱齿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值