【MongoDB】ReadPreference读偏好

在副本集Replica Set中才涉及到ReadPreference的设置,默认情况下,读写都是分发都Primary节点执行,但是对于写少读多的情况,我们希望进行读写分离来分摊压力,所以希望使用Secondary节点来进行读取,Primary只承担写的责任(实际上写只能分发到Primary节点,不可修改)。

MongoDB有5种ReadPreference模式:

  • primary

主节点,默认模式,读操作只在主节点,如果主节点不可用,报错或者抛出异常。

  • primaryPreferred

首选主节点,大多情况下读操作在主节点,如果主节点不可用,如故障转移,读操作在从节点。

  • secondary

从节点,读操作只在从节点, 如果从节点不可用,报错或者抛出异常。

  • secondaryPreferred

首选从节点,大多情况下读操作在从节点,特殊情况(如单主节点架构)读操作在主节点。

  • nearest

最邻近节点,读操作在最邻近的成员,可能是主节点或者从节点。

Spring中的设置ReadPreference:

<!-- mongodb配置 -->
<mongo:mongo id="mongo"  host="${mongo.host}" port="${mongo.port}" write-concern="NORMAL" >
    <mongo:options 
        connections-per-host="${mongo.connectionsPerHost}"
        threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
        connect-timeout="${mongo.connectTimeout}" 
        max-wait-time="${mongo.maxWaitTime}"
        auto-connect-retry="${mongo.autoConnectRetry}" 
        socket-keep-alive="${mongo.socketKeepAlive}"
        socket-timeout="${mongo.socketTimeout}" 
        slave-ok="${mongo.slaveOk}"
        write-number="1" 
        write-timeout="0" 
        write-fsync="false"
    />
</mongo:mongo>

<!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->
<mongo:db-factory id="mongoDbFactory" dbname="uba" mongo-ref="mongo" />

<!-- 读写分离级别配置  -->
<!-- 首选主节点,大多情况下读操作在主节点,如果主节点不可用,如故障转移,读操作在从节点。 -->
<bean id="primaryPreferredReadPreference" class="com.mongodb.TaggableReadPreference.PrimaryPreferredReadPreference" />
<!-- 最邻近节点,读操作在最邻近的成员,可能是主节点或者从节点。  -->
<bean id="nearestReadPreference" class="com.mongodb.TaggableReadPreference.NearestReadPreference" />
<!-- 从节点,读操作只在从节点, 如果从节点不可用,报错或者抛出异常。存在的问题是secondary节点的数据会比primary节点数据旧。  -->
<bean id="secondaryReadPreference" class="com.mongodb.TaggableReadPreference.SecondaryReadPreference" />
<!-- 优先从secondary节点进行读取操作,secondary节点不可用时从主节点读取数据  -->
<bean id="secondaryPreferredReadPreference" class="com.mongodb.TaggableReadPreference.SecondaryPreferredReadPreference" />
<!-- mongodb的主要操作对象,所有对mongodb的增删改查的操作都是通过它完成 -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    <property name="readPreference" ref="primaryPreferredReadPreference" />
</bean>
时间: 2024-08-06 03:36:40

【MongoDB】ReadPreference读偏好的相关文章

mongoDB的读写分离

一.ReadPreference读偏好 在副本集Replica Set中才涉及到ReadPreference的设置,默认情况下,读写都是分发都Primary节点执行,但是对于写少读多的情况,我们希望进行读写分离来分摊压力,所以希望使用Secondary节点来进行读取,Primary只承担写的责任(实际上写只能分发到Primary节点,不可修改). MongoDB有5种ReadPreference模式: primary: 主节点,默认模式,读操作只在主节点,如果主节点不可用,报错或者抛出异常. p

mongodb replication 维护总结

副本集成员最多12个成员,其中只有7个成员拥有投票权.这是为了减少 心跳请求的网络流量和选举话费的时间.心跳每2秒发送一次. 一.新增副本集成员 1.登录primary 2.use admin >rs.add("new_node:port") 或 rs.add({"_id":4,"host":"new_node:port","priority":1,"hidden":false})

MongoDB报表实例方案选型

MongoDB报表实例方案选型 背景介绍 在我们的生产环境使用的是复制集,为了将数据库服务器的业务压力分摊,我们将数据库拆分到了不同的复制集上运行. 我们在MongoDB复制集上运行应用程序,有时候有报表需求,常规用途是获得用户行为的分析,还有其他商业定制指标数据:有搜索引擎的查询需求,使用Solr从oplog.rs获取增量数据更新产品信息的索引. 这些报表查询和搜索引擎的查询需求,尽量不能影响到线上的业务正常运行,因此不能直接在生产数据库上运行报表.经过开发和运维讨论之后,在项目成立之初,计划

MongoDB 副本集的相关概念【转】

一.副本集基本概念 副本集(replica set) MongoDB的replica set是一个mongod进程实例簇,数据在这个簇中相互复制,并自动进行故障切换. MongoDB的数据库复制增加了冗余,确保了高可用性,简化了管理任务如备份,并且增加了读能力.大多数产品部署都使用了复制.MongoDB中primary处理写操作,其它进行复制的成员则是secondaries. 一个副本集可以最多支持12个成员,但是只有7个成员可以参与投票. 注:MongoDB同时提供了传统的master/sla

MongoDB 走马观花(全面解读篇)

目录 一.简介 二.基本模型 BSON 数据类型 分布式ID 三.操作语法 四.索引 索引特性 索引分类 索引评估.调优 五.集群 分片机制 副本集 六.事务与一致性 一致性 小结 一.简介 MongoDB 是一款流行的开源文档型数据库,从它的命名来看,确实是有一定野心的. MongoDB 的原名一开始来自于 英文单词"Humongous", 中文含义是指"庞大",即命名者的意图是可以处理大规模的数据. 但笔者更喜欢称呼它为 "芒果"数据库,除了

mongodb study

mongodb study 读到101个记录不动了,卡住的语句好像是网络不通: File "/Library/Python/2.7/site-packages/pymongo/cursor.py", line 1058, in next if len(self.__data) or self._refresh(): File "/Library/Python/2.7/site-packages/pymongo/cursor.py", line 1019, in _r

MONGODB全面总结

关于Mongodb的全面总结,学习mongodb的人,可以从这里开始! 分类:            MongoDB2013-06-08 09:5610213人阅读评论(0)收藏举报 目录(?)[+] BSON 效率 传输性 性能 写入协议 数据文件 名字空间和盘区 内存映射存储引擎 其他 MongoDB的架构 MongoDB的特点 MongoDB的功能 MongoDB的局限性与不足 适用范围 MongoDB的不适用范围 要点 MongoDB分布式复制 MongoDB语法与现有关系型数据库SQL

使用YCSB测试mongodb分片集群性能

1. 测试工具 本次测试选取YCSB(Yahoo! Cloud System Benchmark)作为测试客户端工具.YCSB是Yahoo开源的一个nosql测试工具,用来测试比较各种nosql的性能,项目地址:https://github.com/brianfrankcooper/YCSB.项目的mongodb目录下有详细的安装和测试方法. YCSB支持常见的nosql数据库读写,如插入,修改,删除,读取等.它可以使用多线程来提高客户端的性能.可以方便的自定义各种场景,如95%插入5%读,或者

【转】使用YCSB测试mongodb分片集群性能

1. 测试工具 本次测试选取YCSB(Yahoo! Cloud System Benchmark)作为测试客户端工具.YCSB是Yahoo开源的一个nosql测试工具,用来测试比较各种nosql的性能,项目地址:https://github.com/brianfrankcooper/YCSB.项目的mongodb目录下有详细的安装和测试方法. YCSB支持常见的nosql数据库读写,如插入,修改,删除,读取等.它可以使用多线程来提高客户端的性能.可以方便的自定义各种场景,如95%插入5%读,或者