您好,登錄后才能下訂單哦!
在副本集Replica Set中才涉及到ReadPreference的設(shè)置,默認(rèn)情況下,讀寫都是分發(fā)都Primary節(jié)點執(zhí)行,但是對于寫少讀多的情況,我們希望進(jìn)行讀寫分離來分?jǐn)倝毫?,所以希望使用Secondary節(jié)點來進(jìn)行讀取,Primary只承擔(dān)寫的責(zé)任(實際上寫只能分發(fā)到Primary節(jié)點,不可修改)。
MongoDB有5種ReadPreference模式:
primary
主節(jié)點,默認(rèn)模式,讀操作只在主節(jié)點,如果主節(jié)點不可用,報錯或者拋出異常。
primaryPreferred
首選主節(jié)點,大多情況下讀操作在主節(jié)點,如果主節(jié)點不可用,如故障轉(zhuǎn)移,讀操作在從節(jié)點。
secondary
從節(jié)點,讀操作只在從節(jié)點, 如果從節(jié)點不可用,報錯或者拋出異常。
secondaryPreferred
首選從節(jié)點,大多情況下讀操作在從節(jié)點,特殊情況(如單主節(jié)點架構(gòu))讀操作在主節(jié)點。
nearest
最鄰近節(jié)點,讀操作在最鄰近的成員,可能是主節(jié)點或者從節(jié)點。
Spring中的設(shè)置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的數(shù)據(jù)庫名,沒有的話會自動創(chuàng)建 --> <mongo:db-factory id="mongoDbFactory" dbname="uba" mongo-ref="mongo" /> <!-- 讀寫分離級別配置 --> <!-- 首選主節(jié)點,大多情況下讀操作在主節(jié)點,如果主節(jié)點不可用,如故障轉(zhuǎn)移,讀操作在從節(jié)點。 --> <bean id="primaryPreferredReadPreference" class="com.mongodb.TaggableReadPreference.PrimaryPreferredReadPreference" /> <!-- 最鄰近節(jié)點,讀操作在最鄰近的成員,可能是主節(jié)點或者從節(jié)點。 --> <bean id="nearestReadPreference" class="com.mongodb.TaggableReadPreference.NearestReadPreference" /> <!-- 從節(jié)點,讀操作只在從節(jié)點, 如果從節(jié)點不可用,報錯或者拋出異常。存在的問題是secondary節(jié)點的數(shù)據(jù)會比primary節(jié)點數(shù)據(jù)舊。 --> <bean id="secondaryReadPreference" class="com.mongodb.TaggableReadPreference.SecondaryReadPreference" /> <!-- 優(yōu)先從secondary節(jié)點進(jìn)行讀取操作,secondary節(jié)點不可用時從主節(jié)點讀取數(shù)據(jù) --> <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>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。