更加復(fù)雜,但是靈活的方法,用于路由報(bào)表查詢到一個(gè)專屬節(jié)點(diǎn)去使用標(biāo)簽和讀偏好。
創(chuàng)新互聯(lián)專注于溫宿企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),成都做商城網(wǎng)站。溫宿網(wǎng)站建設(shè)公司,為溫宿等地區(qū)提供建站服務(wù)。全流程按需求定制制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
因?yàn)槭褂秒[藏成員,設(shè)置一個(gè)成員為priority: 0,但是不設(shè)置它為隱藏。然而,分配一個(gè)標(biāo)簽use: reporting:
PRIMARY> conf = rs.config() { "_id" : "test", "version" : 21, "members" : [ { "_id" : 0, "host" : "xucy.local:27017", }, { "_id" : 1, "host" : "xucy.local:28017", }, { "_id" : 2, "host" : "xucy.local:29017", } ] } // we'll use members[1], the instance on port 28017 PRIMARY> conf.members[1].priority = 0 PRIMARY> conf.members[1].tags = { "use": "reporting" } PRIMARY> conf.version += 1 PRIMARY> rs.reconfig(conf) [...]
像之前一樣,xucy.local:28017絕不會(huì)成為主;然而,在這種情況下其他兩個(gè)機(jī)器變得不可達(dá),你的應(yīng)用將能處理讀到報(bào)表服務(wù)器。它會(huì)繼續(xù)不用說(shuō)你的報(bào)表應(yīng)該在這樣一個(gè)事件期間暫停。
你的報(bào)表代碼將會(huì)像這樣(用Python,這次):
from pymongo import MongoReplicaSetClient from pymongo.read_preferences import ReadPreference rep_set = MongoReplicaSetClient( 'xucy.local:27017,xucy.local:28017,xucy.local:29017', replicaSet = 'test', read_preference = ReadPreference.SECONDARY, tag_sets = [{'use':'reporting'}] ) # check to ensure we're not running reporting against the sole remaining secondary if rep_set.primary is not None: rep_set.my_application.users.aggregate(...)
以上只發(fā)送報(bào)表查詢到副本標(biāo)記有use: reporting,并且如果沒有可用的主,它根本上避免運(yùn)行。在實(shí)踐中,你會(huì)拋出異常并在你的擴(kuò)展代碼中處理它們,如果你發(fā)現(xiàn)沒有主!更好的還是,你的監(jiān)控可以設(shè)置運(yùn)行時(shí)可用的值,你可以轉(zhuǎn)移,例如,reporting_system.ok()。
益處和考慮
使用標(biāo)簽和讀偏好允許一些級(jí)別的靈活性,而那在隱藏成員中是不可能的。
報(bào)表實(shí)例可以容易添加
因?yàn)槟愕倪B接代碼是可定義的,而不是指定到一個(gè)專門的主機(jī),添加更多節(jié)點(diǎn)為報(bào)表作業(yè),只添加他們并標(biāo)記他們,像這樣:
PRIMARY> rs.add({_id:3, host:"xucy.local:30017", priority:0, tags:{'use':'reporting'}})
你存在的代碼將會(huì)利用新的容量,并且復(fù)制集將繼續(xù)運(yùn)行,不用觸發(fā)選舉和從客戶端斷開連接。
報(bào)表實(shí)例可以被跳過(guò)或刪除
報(bào)表標(biāo)記可以被移動(dòng),或者甚至移除,如果你需要提供讀帶寬給其他作業(yè)在必要時(shí)。像這樣的一個(gè)重新配置將會(huì)觸發(fā)選舉,并重連所有客戶端,但是這不會(huì)比其他選項(xiàng)更糟糕。注意:這是一個(gè)反模式的通過(guò)發(fā)布生產(chǎn)讀到副本成員來(lái)增加常用容量。這只是一個(gè)緊急方式。
一些驅(qū)動(dòng)需要手工同步
Ruby驅(qū)動(dòng)(像1.9.2),例如,不會(huì)刷新副本集的視圖除非客戶端像這樣顯式初始化,使用refresh_mode: :sync。檢查你的驅(qū)動(dòng)文檔。
結(jié)論
簡(jiǎn)單的復(fù)制配置已經(jīng)成為我喜歡MongoDB原因之一,它使得MySQL復(fù)制看起來(lái)像出自石器時(shí)代。它有些粗糙,但是已經(jīng)在不斷提升性能。無(wú)論你使用標(biāo)記集合或者隱藏成員,構(gòu)建一個(gè)報(bào)表架構(gòu)在MongoDB的復(fù)制屬性上,簡(jiǎn)化操作,讓你專注于構(gòu)建一個(gè)偉大的應(yīng)用。
網(wǎng)站標(biāo)題:MongoDB報(bào)表實(shí)例--標(biāo)簽成員方案
鏈接分享:http://aaarwkj.com/article10/igpodo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站、、企業(yè)建站、域名注冊(cè)、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)