溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

【MongoDB】ReadPreference讀偏好

發(fā)布時間:2020-07-05 17:04:46 來源:網(wǎng)絡(luò) 閱讀:15221 作者:lizhuquan0769 欄目:MongoDB數(shù)據(jù)庫

    在副本集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>


向AI問一下細(xì)節(jié)

免責(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)容。

AI