標籤:mongodb spring readpreference 讀偏好
在複本集Replica Set中才涉及到ReadPreference的設定,預設情況下,讀寫都是分發都Primary節點執行,但是對於寫少讀多的情況,我們希望進行讀寫分離來分攤壓力,所以希望使用Secondary節點來進行讀取,Primary只承擔寫的責任(實際上寫只能分發到Primary節點,不可修改)。
MongoDB有5種ReadPreference模式:
主節點,預設模式,讀操作只在主節點,如果主節點不可用,報錯或者拋出異常。
首選主節點,大多情況下讀操作在主節點,如果主節點不可用,如容錯移轉,讀操作在從節點。
從節點,讀操作只在從節點, 如果從節點不可用,報錯或者拋出異常。
首選從節點,大多情況下讀操作在從節點,特殊情況(如單主節點架構)讀操作在主節點。
最鄰近節點,讀操作在最鄰近的成員,可能是主節點或者從節點。
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>
本文出自 “架構師之路” 部落格,請務必保留此出處http://lizhuquan0769.blog.51cto.com/2591147/1763287
【MongoDB】ReadPreference讀偏好