【MongoDB】ReadPreference讀偏好

來源:互聯網
上載者:User

標籤:mongodb   spring   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>


本文出自 “架構師之路” 部落格,請務必保留此出處http://lizhuquan0769.blog.51cto.com/2591147/1763287

【MongoDB】ReadPreference讀偏好

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.