两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

用于限制對(duì)版本存儲(chǔ)資源使用的方法和系統(tǒng)的制作方法

文檔序號(hào):6649399閱讀:128來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):用于限制對(duì)版本存儲(chǔ)資源使用的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般涉及計(jì)算機(jī),尤其涉及資源使用。
背景技術(shù)
每次客戶(hù)機(jī)啟動(dòng)與諸如數(shù)據(jù)庫(kù)的版本存儲(chǔ)的一事務(wù),就要消耗一定數(shù)量的資源。即使在該事務(wù)提交或放棄后,這些資源仍可能繼續(xù)被消耗,直到先于該事務(wù)啟動(dòng)的所有事務(wù)也都已經(jīng)結(jié)束。在諸如文件復(fù)制系統(tǒng)(FRS)的高頻率更改版本存儲(chǔ)中,或在相比并發(fā)的事務(wù)含有少量資源的版本存儲(chǔ)中,在進(jìn)行中的事務(wù)所需的資源可以超過(guò)可用的資源數(shù)量。需要一種用于限制對(duì)版本存儲(chǔ)資源使用的方法和系統(tǒng)。

發(fā)明內(nèi)容
本發(fā)明簡(jiǎn)要地提供了一種用于限制對(duì)版本存儲(chǔ)的資源使用的方法和系統(tǒng)。限制指示了可以由正在進(jìn)行的事務(wù)所消耗的資源的總量。剩余資源的累計(jì)被維護(hù)。在新的事務(wù)開(kāi)始之前,作出關(guān)于是否存在足夠的剩余資源來(lái)完成新的事務(wù)的判斷。如果是的,那么該事務(wù)開(kāi)始并調(diào)整累計(jì)。如果不是,那么該事務(wù)等待直到有更多資源可用。當(dāng)一個(gè)事務(wù)完成時(shí),如果它是最老的進(jìn)行中的事務(wù),那么釋放資源。否則,與該事務(wù)關(guān)聯(lián)的資源不被釋放直到在該事務(wù)前開(kāi)始的所有事務(wù)都已經(jīng)完成。這保證了,版本存儲(chǔ)的客戶(hù)機(jī)不會(huì)超過(guò)可以由進(jìn)行中的事務(wù)所消耗的資源的限制。
當(dāng)結(jié)合附圖,由下文具體實(shí)施方式
,其它優(yōu)點(diǎn)會(huì)變得明顯,附圖中


圖1是表示可在其中包含本發(fā)明的計(jì)算機(jī)系統(tǒng)的框圖;圖2是根據(jù)本發(fā)明的多個(gè)方面,表示可使用來(lái)實(shí)現(xiàn)本發(fā)明的示例性版本存儲(chǔ)的框圖;圖3是示出根據(jù)本發(fā)明的多個(gè)方面的示例性數(shù)據(jù)機(jī)構(gòu)的框圖;圖4是根據(jù)本發(fā)明的多個(gè)方面,一般表示為啟動(dòng)一個(gè)事務(wù)在獲取資源中可能發(fā)生的動(dòng)作的流程圖;圖5是根據(jù)本發(fā)明的多個(gè)方面,一般表示在一個(gè)事務(wù)完成后釋放資源之前可能發(fā)生的動(dòng)作的流程圖;圖6是根據(jù)本發(fā)明的多個(gè)方面,表示可在其中實(shí)現(xiàn)本發(fā)明的示例性環(huán)境的框圖;圖7是根據(jù)本發(fā)明的多個(gè)方面,表示可在其中實(shí)現(xiàn)本發(fā)明的另一個(gè)示例性環(huán)境的框圖。
具體實(shí)施例方式
示例性操作環(huán)境圖1示出了可在其上實(shí)現(xiàn)本發(fā)明的合適的計(jì)算系統(tǒng)環(huán)境100的示例。計(jì)算系統(tǒng)環(huán)境100只是合適的計(jì)算環(huán)境的一個(gè)示例,并不旨在對(duì)本發(fā)明的使用范圍或功能提出任何限制。也不應(yīng)該把計(jì)算環(huán)境100解釋為對(duì)示例性操作環(huán)境100中示出的任一組件或其組合有任何依賴(lài)性或要求。
本發(fā)明可用眾多其它通用或?qū)S糜?jì)算系統(tǒng)環(huán)境或配置來(lái)操作。適合在本發(fā)明中使用的公知的計(jì)算系統(tǒng)、環(huán)境和/或配置的示例包括,但不限于,個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持或膝上型設(shè)備、多處理器系統(tǒng)、基于微控制器的系統(tǒng)、機(jī)頂盒、可編程消費(fèi)者電子產(chǎn)品、網(wǎng)絡(luò)PC、小型機(jī)、大型機(jī)、包含上述系統(tǒng)或設(shè)備中的任一個(gè)的分布式計(jì)算機(jī)環(huán)境等。
本發(fā)明可在諸如由計(jì)算機(jī)執(zhí)行的程序模塊等的計(jì)算機(jī)可執(zhí)行指令的通用語(yǔ)境下描述。一般而言,程序模塊包括例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等,它們執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類(lèi)型。本發(fā)明也可以在分布式計(jì)算環(huán)境下實(shí)現(xiàn),其中任務(wù)由通過(guò)通信網(wǎng)絡(luò)連接的遠(yuǎn)程處理設(shè)備執(zhí)行。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)器存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。
參考圖1,用于實(shí)現(xiàn)本發(fā)明的一個(gè)示例性系統(tǒng)包括計(jì)算機(jī)110形式的通用計(jì)算設(shè)備。計(jì)算機(jī)110的組件可以包括,但不限于,處理單元120、系統(tǒng)存儲(chǔ)器130和將包括系統(tǒng)存儲(chǔ)器在內(nèi)的各種系統(tǒng)組件耦合至處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可以是若干類(lèi)型的總線結(jié)構(gòu)中的任一種,包括存儲(chǔ)器總線或存儲(chǔ)器控制器、外圍總線和使用各種總線體系結(jié)構(gòu)中的任一種的局部總線。作為示例,而非限制,這樣的體系結(jié)構(gòu)包括工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線、微通道體系結(jié)構(gòu)(MCA)總線、擴(kuò)展的ISA(EISA)總線、視頻電子技術(shù)標(biāo)準(zhǔn)協(xié)會(huì)(VESA)局部總線和外圍部件互連(PCI)總線(也被稱(chēng)為Mezzanine總線)。
計(jì)算機(jī)110通常包括各種計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是能夠被計(jì)算機(jī)110訪問(wèn)的任何可用介質(zhì),且包括易失性和非易失性介質(zhì)、可移動(dòng)和不可移動(dòng)介質(zhì)。作為示例,而非限制,計(jì)算機(jī)可讀介質(zhì)可以包括計(jì)算機(jī)存儲(chǔ)介質(zhì)和通信介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以任何方法或技術(shù)實(shí)現(xiàn)的用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的易失性和非易失性、可移動(dòng)和不可移動(dòng)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括,但不限于,RAM、ROM、EEPROM、閃存或其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能盤(pán)(DVD)或其它光盤(pán)存儲(chǔ)、磁帶盒、磁帶、磁盤(pán)存儲(chǔ)或其它磁性存儲(chǔ)設(shè)備、或能用于存儲(chǔ)所需信息且可以由計(jì)算機(jī)110訪問(wèn)的任何其它介質(zhì)。通信介質(zhì)通常具體化為諸如載波或其它傳輸機(jī)制等已調(diào)制數(shù)據(jù)信號(hào)中的計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù),且包含任何信息傳遞介質(zhì)。術(shù)語(yǔ)“已調(diào)制數(shù)據(jù)信號(hào)”指的是這樣一種信號(hào),其一個(gè)或多個(gè)特征以在信號(hào)中編碼信息的方式被設(shè)定或更改。作為示例,而非限制,通信介質(zhì)包括有線介質(zhì),諸如有線網(wǎng)絡(luò)或直接線連接,以及無(wú)線介質(zhì),諸如聲學(xué)、RF、紅外線和其它無(wú)線介質(zhì)。上述中任一個(gè)的組合也應(yīng)包括在計(jì)算機(jī)可讀介質(zhì)的范圍之內(nèi)。
系統(tǒng)存儲(chǔ)器130包括易失性或非易失性存儲(chǔ)器形式的計(jì)算機(jī)存儲(chǔ)介質(zhì),諸如只讀存儲(chǔ)器(ROM)131和隨機(jī)存取存儲(chǔ)器(RAM)132。基本輸入/輸出系統(tǒng)133(BIOS)包含有助于諸如啟動(dòng)時(shí)在計(jì)算機(jī)110中元件之間傳遞信息的基本例程,它通常存儲(chǔ)在ROM 131中。RAM 132通常包含處理單元120可以立即訪問(wèn)和/或目前正在操作的數(shù)據(jù)和/或程序模塊。作為示例,而非限制,圖1示出了操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136和程序數(shù)據(jù)137。
計(jì)算機(jī)110也可以包括其它可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)。僅作為示例,圖1示出了從不可移動(dòng)、非易失性磁介質(zhì)中讀取或向其寫(xiě)入的硬盤(pán)驅(qū)動(dòng)器141,從可移動(dòng)、非易失性磁盤(pán)152中讀取或向其寫(xiě)入的磁盤(pán)驅(qū)動(dòng)器151,以及從諸如CD ROM或其它光學(xué)介質(zhì)等可移動(dòng)、非易失性光盤(pán)156中讀取或向其寫(xiě)入的光盤(pán)驅(qū)動(dòng)器155??梢栽谑纠圆僮鳝h(huán)境下使用的其它可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)包括,但不限于,盒式磁帶、閃存卡、數(shù)字多功能盤(pán)、數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等。硬盤(pán)驅(qū)動(dòng)器141通常由不可移動(dòng)存儲(chǔ)器接口,諸如接口140連接至系統(tǒng)總線121,磁盤(pán)驅(qū)動(dòng)器151和光盤(pán)驅(qū)動(dòng)器155通常由可移動(dòng)存儲(chǔ)器接口,諸如接口150連接至系統(tǒng)總線121。
以上描述和在圖1中示出的驅(qū)動(dòng)器及其相關(guān)聯(lián)的計(jì)算機(jī)存儲(chǔ)介質(zhì)為計(jì)算機(jī)110提供了對(duì)計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的存儲(chǔ)。例如,在圖1中,硬盤(pán)驅(qū)動(dòng)器141被示為存儲(chǔ)操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147。注意,這些組件可以與操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136和程序數(shù)據(jù)137相同或不同。操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147在這里被標(biāo)注了不同的標(biāo)號(hào)是為了說(shuō)明至少它們是不同的副本。用戶(hù)可以通過(guò)輸入設(shè)備,諸如鍵盤(pán)162和定點(diǎn)設(shè)備161(通常指鼠標(biāo)、跟蹤球或觸摸墊)向計(jì)算機(jī)110輸入命令和信息。其它輸入設(shè)備(未示出)可以包括麥克風(fēng)、操縱桿、游戲墊、圓盤(pán)式衛(wèi)星天線、掃描儀、手持PC或其它書(shū)寫(xiě)板的觸敏屏等。這些和其它輸入設(shè)備通常由耦合至系統(tǒng)總線的用戶(hù)輸入接口160連接至處理單元120,但也可以由其它接口或總線結(jié)構(gòu),諸如并行端口、游戲端口或通用串行總線(USB)連接。監(jiān)視器191或其它類(lèi)型的顯示設(shè)備也經(jīng)由接口,諸如視頻接口190連接至系統(tǒng)總線121。除監(jiān)視器以外,計(jì)算機(jī)也可以包括其它外圍輸出設(shè)備,諸如揚(yáng)聲器197和打印機(jī)196,它們可以通過(guò)輸出外圍接口195連接。
計(jì)算機(jī)110可使用至一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī),諸如遠(yuǎn)程計(jì)算機(jī)180的邏輯連接在網(wǎng)絡(luò)化環(huán)境下操作。遠(yuǎn)程計(jì)算機(jī)180可以是個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其它共用網(wǎng)絡(luò)節(jié)點(diǎn),且通常包括上文相對(duì)于計(jì)算機(jī)110描述的許多或所有元件,盡管在圖1中只示出存儲(chǔ)器存儲(chǔ)設(shè)備181。圖1中所示邏輯連接包括局域網(wǎng)(LAN)171和廣域網(wǎng)(WAN)173,但也可以包括其它網(wǎng)絡(luò)。這樣的網(wǎng)絡(luò)環(huán)境在辦公室、企業(yè)范圍計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)中是常見(jiàn)的。
當(dāng)在LAN網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)110通過(guò)網(wǎng)絡(luò)接口或適配器170連接至局域網(wǎng)171。當(dāng)在WAN網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)110通常包括調(diào)制解調(diào)器172或用于通過(guò)諸如因特網(wǎng)等WAN 173建立通信的其它裝置。調(diào)制解調(diào)器172可以是內(nèi)部或外部的,它可以通過(guò)用戶(hù)輸入接口160或其它合適的機(jī)制連接至系統(tǒng)總線121。在網(wǎng)絡(luò)化環(huán)境中,相對(duì)于計(jì)算機(jī)110所描述的程序模塊或其部分可以存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。作為示例,而非限制,圖1示出了遠(yuǎn)程應(yīng)用程序185駐留在存儲(chǔ)器設(shè)備181上。可以理解,所示的網(wǎng)絡(luò)連接是示例性的,且可以使用在計(jì)算機(jī)之間建立通信鏈路的其它手段。
限制消耗的資源圖2是根據(jù)本發(fā)明的多個(gè)方面,表示可使用來(lái)實(shí)現(xiàn)本發(fā)明的示例性版本存儲(chǔ)的框圖。該版本存儲(chǔ)包括,數(shù)據(jù)庫(kù)205、事務(wù)日志210和為眾多事務(wù)消耗的資源215-217。消耗的資源215-217可以部分或全部存儲(chǔ)在事務(wù)日志210中。每一事務(wù)的下標(biāo)指示了事務(wù)開(kāi)始的時(shí)間順序。例如,事務(wù)T1在事務(wù)T3之前開(kāi)始的事務(wù)T2之前開(kāi)始。
在版本存儲(chǔ)中,每次客戶(hù)機(jī)(未示出)使用數(shù)據(jù)庫(kù)205啟動(dòng)一個(gè)事務(wù),創(chuàng)建了數(shù)據(jù)庫(kù)的“快照”。邏輯上,“快照”是數(shù)據(jù)庫(kù)在時(shí)間上特定點(diǎn)的副本。事務(wù)日志可以用來(lái)跟蹤從啟動(dòng)該事務(wù)的時(shí)刻開(kāi)始的數(shù)據(jù)庫(kù)中的差異(例如,增量),使得啟動(dòng)事務(wù)的時(shí)刻的數(shù)據(jù)庫(kù)狀態(tài)可以從事務(wù)日志中獲得,而不是當(dāng)創(chuàng)建快照時(shí)創(chuàng)建數(shù)據(jù)庫(kù)的整個(gè)新的副本。
事務(wù)是原子的、一致的、獨(dú)立的且持久的。在處理一事務(wù)的過(guò)程中,可能發(fā)生對(duì)多個(gè)記錄的修改。可以復(fù)制將被修改的記錄,且可修改副本,而不是直接在數(shù)據(jù)庫(kù)中修改記錄。數(shù)據(jù)庫(kù)的其它客戶(hù)機(jī)在該事務(wù)提交之前不能夠看到這些修改。當(dāng)該事務(wù)提交時(shí),使用一個(gè)原子操作傳送這些修改至數(shù)據(jù)庫(kù)。如果放棄了該事務(wù),那么丟棄修改,且不將修改傳送給數(shù)據(jù)庫(kù)。修改可以被存儲(chǔ)在事務(wù)日志210中至少直到該事務(wù)被提交或放棄。
在處理事務(wù)的過(guò)程中,要修改的記錄可以被復(fù)制到事務(wù)日志210中。這些被復(fù)制的記錄消耗事務(wù)日志210中的資源。如果事務(wù)在大小上都是固定的,那么每一事務(wù)消耗的資源數(shù)量也可以是固定的。如果事務(wù)在大小上可以變化,那么每一事務(wù)消耗的資源數(shù)量也可以變化。
可以以其它方式實(shí)現(xiàn)版本存儲(chǔ),但是即使在那樣的版本存儲(chǔ)中,當(dāng)事務(wù)在進(jìn)行中時(shí)消耗資源,即使在該事務(wù)提交或放棄后也可能繼續(xù)消耗資源。版本存儲(chǔ)可以以多種方式實(shí)現(xiàn)而不背離本發(fā)明的精神或范圍。
可以同時(shí)進(jìn)行多于一個(gè)的事務(wù)。與進(jìn)行中的事務(wù)相關(guān)聯(lián)的資源不能被返回來(lái)重新使用直到在該事務(wù)之前啟動(dòng)的所有事務(wù)完成(即,提交或放棄)。這由事務(wù)215-217所消耗的資源之間的依賴(lài)箭頭示出。例如,如果T3在T1進(jìn)行時(shí)發(fā)生,然后T3提交,由T3217消耗的資源不能夠被釋放直到由T1215消耗的資源被釋放。
更正式地,給定以時(shí)間順序發(fā)生的事務(wù)T1到Tn(即,T1先于T2,T2先于T3,以此類(lèi)推),令δ1到δn表示由每一事務(wù)消耗的資源的數(shù)量。那么,∑δi(其中,1≤i≤n)是在當(dāng)事務(wù)T1到Tn進(jìn)行中的任何時(shí)刻消耗的資源總量。
然而,當(dāng)事務(wù)Tk完成時(shí),能夠被釋放的資源的數(shù)量可以是1.0,如果存在一個(gè)未結(jié)束的事務(wù)Ti使得i<k;或者2.給定j,使得j>k且Tj是一個(gè)進(jìn)行中的事務(wù),那么可以被釋放的資源的數(shù)量是對(duì)所有i使得(k<i<j)且(Ti已經(jīng)完成)的∑δi。注意到,j可以指示沒(méi)有仍在進(jìn)行中的在Tk之后開(kāi)始的事務(wù)。j可以通過(guò)被設(shè)為無(wú)限大或指示最大值的一個(gè)數(shù)字來(lái)指示這個(gè)。
規(guī)定上述釋放資源的條件的另一種方式是,當(dāng)Tk完成時(shí)沒(méi)有資源可以釋放除非Tk是最老的事務(wù)(即,沒(méi)有i<k使得Ti是在進(jìn)行中的事務(wù))。
為了避免需要比在任何給定時(shí)間可以被消耗的資源總量更多的資源,版本存儲(chǔ)的一個(gè)客戶(hù)機(jī)可以被分配一個(gè)資源限制,超過(guò)該限制客戶(hù)機(jī)不能進(jìn)行。客戶(hù)機(jī)可以確定啟動(dòng)一個(gè)事務(wù)是否會(huì)超過(guò)該限制,并阻塞(例如,等待)直到有足夠的資源是可用的來(lái)保證客戶(hù)機(jī)可以完成該客戶(hù)機(jī)啟動(dòng)的任何事務(wù)而不超過(guò)可以被消耗的資源的總量。在任何給定時(shí)刻可以由一個(gè)客戶(hù)機(jī)消耗的資源的總量以后往往被稱(chēng)為Θ。
通過(guò)促成客戶(hù)機(jī)阻塞直到資源變成可用來(lái)限制在進(jìn)行中的事務(wù)的數(shù)量,可以使用下列三個(gè)原語(yǔ)InitializeResource(p)、AcquireResource(T,δ)以及ReleaseResource(T)。
InitializeResource(ρ)可以在啟動(dòng)第一個(gè)事務(wù)之前的任何時(shí)刻被調(diào)用。當(dāng)調(diào)用InitializeResource(ρ)時(shí),消耗的資源的總量(以后用σ表示)被分配給當(dāng)沒(méi)有事務(wù)進(jìn)行時(shí)殘留的消耗的資源的數(shù)量。例如,可能存在與諸如創(chuàng)建數(shù)據(jù)結(jié)構(gòu)等維護(hù)版本存儲(chǔ)相關(guān)聯(lián)的開(kāi)銷(xiāo)。該開(kāi)銷(xiāo)可以由InitializeResource(ρ)說(shuō)明,其中ρ等于當(dāng)沒(méi)有事務(wù)進(jìn)行時(shí)消耗的資源數(shù)量。除非σ<Θ,沒(méi)有事務(wù)可以被允許開(kāi)始。
AcquireResource(T,δ)可以在啟動(dòng)以T表示的事務(wù)之前被調(diào)用,其中T是由調(diào)用者分配給每一事務(wù)的存儲(chǔ)器中的唯一對(duì)象。AcquireResource(T,δ)檢查條件(δ+σ)<=Θ,且如果該條件為真,那么它返回,令調(diào)用者啟動(dòng)消耗資源總計(jì)為δ的新事務(wù)。如果該條件為假,那么AcquireResource(T,δ)阻塞直到上述條件被滿(mǎn)足,將σ分派給δ+σ,然后返回。
ReleaseResouree(T)可以在事務(wù)T完成后被調(diào)用。ReleaseResource(T)可以被實(shí)現(xiàn)為一個(gè)無(wú)阻塞的原語(yǔ)。
在本發(fā)明的一個(gè)實(shí)施例中,可以選擇δ為每一事務(wù)中預(yù)計(jì)的更新的數(shù)量。平均起來(lái),該數(shù)量可以結(jié)果是一個(gè)常數(shù)。在這種情況下,δ可以被選擇為1或其它任何常數(shù)只要Θ是按照δ來(lái)計(jì)算的。如果δ隨事務(wù)變化,δ可以被表示為基線資源數(shù)量的倍數(shù)。例如,調(diào)用者可以知道它將會(huì)修改版本存儲(chǔ)中的四個(gè)記錄,并可以傳遞一個(gè)δ是當(dāng)僅修改一個(gè)記錄時(shí)傳遞過(guò)的δ的四倍。
在本發(fā)明的另一個(gè)實(shí)施例中,δ可以以信用的形式為特征,其中總可用信用等于Θ,而δ是由調(diào)用者為每一事務(wù)計(jì)算的。
傳統(tǒng)的信號(hào)可以被用來(lái)跟蹤資源的使用。信號(hào)是能夠被初始化為一個(gè)整數(shù)值并提供下列三種操作的變量I(信號(hào),δ)該操作初始化信號(hào)為δ;P(信號(hào),δ)該操作阻塞直到信號(hào)>=δ,然后在返回之前從信號(hào)中減去δ;V(信號(hào),δ)該操作將δ加到信號(hào)上,喚醒阻塞在該信號(hào)上的任何線程,然后返回。
上述每一操作都是原子的。理想上,V喚醒和δ能夠滿(mǎn)足的精確地一樣多的線程。在多個(gè)Windows操作系統(tǒng)中,這些操作可以分別由CreateSemaphore(),WaitForSingleObject(),and ReleaseSemaphore()來(lái)實(shí)現(xiàn)。其它操作系統(tǒng)可以使用其它調(diào)用來(lái)實(shí)現(xiàn)這些操作,而不背離本發(fā)明的精神或范圍。
給定上述原語(yǔ),σ可以被實(shí)現(xiàn)為一個(gè)初始化為Θ(允許消耗的資源總量)的信號(hào)。AcquireResource()可以被實(shí)現(xiàn)為產(chǎn)生P(σ,δ)。這保證了消耗的資源總量會(huì)<=Θ。
ReleaseResource()可以不向信號(hào)發(fā)信號(hào)V(σ,δ),如果存在比T老的進(jìn)行中的事務(wù)。為了確定是否存在更老的進(jìn)行中的信號(hào),可以利用如圖3中所示的雙向鏈表300。當(dāng)鏈表中僅包含頭節(jié)點(diǎn)305和空節(jié)點(diǎn)315時(shí),鏈表300為空。鏈表的頭是由頭節(jié)點(diǎn)305連接的第一個(gè)節(jié)點(diǎn)(即,節(jié)點(diǎn)310)只要它不是空節(jié)點(diǎn)315。內(nèi)部節(jié)點(diǎn)310-312的每一個(gè)可以對(duì)應(yīng)于一個(gè)事務(wù),且可以包括標(biāo)識(shí)符T和由該事務(wù)消耗的資源的數(shù)量。
在任何給定點(diǎn)上,該雙向鏈表可以包括,頭TiTjTk...空,其中事務(wù)以時(shí)間順序從左往右排列。可以實(shí)現(xiàn)返回由T消耗的資源數(shù)量的函數(shù)。以后,由T消耗的資源的數(shù)量往往可以稱(chēng)作Δ(T)。為了存儲(chǔ)與每一節(jié)點(diǎn)相關(guān)聯(lián)的資源的數(shù)量,可以在每一節(jié)點(diǎn)中儲(chǔ)備存儲(chǔ)器。
也可以實(shí)現(xiàn)保證對(duì)鏈表互斥的鎖。某些示例性的鎖包括,旋轉(zhuǎn)鎖、互斥、同步化事件等。然而,可以認(rèn)識(shí)到,可以使用保證對(duì)鏈表互斥的任何鎖,而不背離本發(fā)明的精神和范圍。鎖可以被用來(lái)預(yù)防鏈表在鏈表插入、遍歷或查找過(guò)程中被另一個(gè)進(jìn)程修改。在本文檔中,這些鎖原語(yǔ)往往稱(chēng)為AcquireListLock()和ReleaseListLock()。
用于為一個(gè)事務(wù)獲取資源的一個(gè)示例性算法如下AcquireResource(T,δ){If(δ>Θ)return error;//This request can never be//satisfied(這個(gè)請(qǐng)求永遠(yuǎn)不能夠被滿(mǎn)足)Obtain memory for T;InitializeΔ(T)toδ;P(σ,δ); //this may block(可能阻塞)AcquireListLock();Insert T at the tail of the list;ReleaseListLock();return;}上述算法在啟動(dòng)一個(gè)事務(wù)之前被調(diào)用,并在圖4中描述,圖4是根據(jù)根發(fā)明的多個(gè)實(shí)施例,一般表示為啟動(dòng)一個(gè)事務(wù)而獲取資源中可能發(fā)生的動(dòng)作的流程圖。
在框405處,過(guò)程開(kāi)始。在框407處,作出關(guān)于是否δ>Θ的判斷。如果是,那么過(guò)程沿分支到帶一個(gè)錯(cuò)誤返回的框412處。如果不是,過(guò)程沿分支到框410處。δ>Θ指示該事務(wù)可能潛在地使用比允許使用的資源的總量更多的資源。在框412處返回一個(gè)錯(cuò)誤,而不是永久地阻塞來(lái)等待有足夠的資源成為可用(不會(huì)發(fā)生)。
在框410處,為節(jié)點(diǎn)獲取存儲(chǔ)器。在框415處,指示事務(wù)T潛在需要的資源的節(jié)點(diǎn)中的一個(gè)變量被初始化為δ。在框420處,執(zhí)行P(σ,δ),可能會(huì)阻塞(直到更多的資源成為可用)。在框425處,在鏈表上獲得一個(gè)鎖。在框430處,該節(jié)點(diǎn)被插入鏈表的尾部。在框435處,釋放該鎖。在框440處,該過(guò)程帶著一個(gè)成功的指示返回。
圖5是根據(jù)本發(fā)明的多個(gè)方面,一般表示在一個(gè)事務(wù)完成后釋放資源之前可能發(fā)生的動(dòng)作的流程圖。該過(guò)程在提交或放棄一個(gè)事務(wù)之前被調(diào)用。在框505處,該過(guò)程開(kāi)始。在框510處,在鏈表上獲得一個(gè)鎖。在框512處,與剛完成的事務(wù)關(guān)聯(lián)的節(jié)點(diǎn)(即T)被設(shè)置。在框515處,作出關(guān)于T是否是鏈表頭的判斷。記住,如果頭節(jié)點(diǎn)指向T,那么T是鏈表的頭。如果T是鏈表的頭,那么過(guò)程沿分支到框520處;否則,過(guò)程沿分支到框525處。
在框520處,由T指示的消耗的資源被添加到信號(hào)上,且阻塞在該信號(hào)上的所有線程被喚醒。注意,當(dāng)與該節(jié)點(diǎn)直接右邊的節(jié)點(diǎn)相關(guān)聯(lián)的事務(wù)完成時(shí),由T指示的消耗的資源可以向上調(diào)整(例如,見(jiàn)框525和530)。
在框525和530處,做好將由T指示的資源添加到T直接左邊的節(jié)點(diǎn)(即,T’)的準(zhǔn)備。注意,T’保證存在,因?yàn)門(mén)不是鏈表的頭。在框525處,T’被設(shè)置。在框530處,由T指示的消耗的資源被添加至由T’表示的消耗的資源。
在框535處,將T從鏈表中移除。在框540處,釋放鏈表上的鎖。在框545處,該過(guò)程返回。
按照前述的原語(yǔ),該算法可以如下表示ReleaseResource(T){AcquireListLock();////If T is the oldest transaction,then we can release its//resources completely(如果T是最老的事務(wù),那么我們可以完全釋放其資源)//if(T is the head of the list){V(σ,Δ(T));//release all resources and wake up any//threads that are blocked(釋放所有資源并喚醒阻塞的任何線程)}else{////Since there are older transactions outstanding,//T may not release its resources//until all the outstanding transactions are finished.(因?yàn)榇嬖谖赐瓿傻母系氖聞?wù),T不能釋放其資源直到該未完成的事務(wù)完成。)//T′=LeftLink(T);////LeftLink()obtains the transaction that is essentially//the immediately preceding,temporally,transaction of//T.This is guaranteed non-NIL since T is not the head//of the list.(LeftLink()獲取基本上T的時(shí)間上直接在前的事務(wù)。這保證是非空的,因?yàn)門(mén)不是頭)//Δ(T′)←Δ(T′)+Δ(T);//propagate the resources//consumed up the chain(將消耗的資源沿鏈向前傳送)}Remove(T)from the list;Free memory for T;ReleaseListLock();return;}
盡管,圖3-5是參考雙向鏈表描述的,這樣可以獲得對(duì)獲取/釋放原語(yǔ)的O(1)的實(shí)現(xiàn),可以認(rèn)識(shí)到,可以使用其它的數(shù)據(jù)結(jié)構(gòu)包括,散列表、單向鏈表、數(shù)組、層次結(jié)構(gòu)等。實(shí)際上,可以使用能夠維護(hù)事務(wù)時(shí)間順序的任何數(shù)據(jù)結(jié)構(gòu),而不背離本發(fā)明的精神或范圍。
圖6是根據(jù)本發(fā)明的多個(gè)方面,表示可在其中實(shí)現(xiàn)本發(fā)明的示例性環(huán)境的框圖。該環(huán)境包括客戶(hù)機(jī)605、服務(wù)器610和版本存儲(chǔ)615。在本發(fā)明的一個(gè)實(shí)施例中,當(dāng)服務(wù)器610接收到版本存儲(chǔ)的請(qǐng)求,并執(zhí)行維護(hù)版本存儲(chǔ)615的必要措施時(shí),結(jié)合圖4和5描述的過(guò)程在客戶(hù)機(jī)605上執(zhí)行。在本發(fā)明的該實(shí)施例中,客戶(hù)機(jī)使用來(lái)限制其事務(wù)的資源限制可以由客戶(hù)機(jī)、服務(wù)器、專(zhuān)用程序、計(jì)算機(jī)管理員等來(lái)選擇。在本發(fā)明的一個(gè)實(shí)施例中,客戶(hù)機(jī)605可以查詢(xún)服務(wù)器610來(lái)確定服務(wù)器610可以向客戶(hù)機(jī)605貢獻(xiàn)多少資源而不顯著地降低對(duì)其它客戶(hù)機(jī)的性能。注意,客戶(hù)機(jī)605、服務(wù)器610和版本存儲(chǔ)615中的任何可以被一起包括在一臺(tái)機(jī)器上或可以在分開(kāi)的機(jī)器上,而不背離本發(fā)明的精神或范圍。
圖7是根據(jù)本發(fā)明的多個(gè)方面,表示可在其中實(shí)現(xiàn)本發(fā)明的另一個(gè)示例性環(huán)境的框圖。該環(huán)境包括服務(wù)器705、版本存儲(chǔ)710、和四個(gè)客戶(hù)機(jī)715-718。在如圖7所示的實(shí)施例中,客戶(hù)機(jī)715-718中的每一個(gè)可試圖來(lái)使用版本存儲(chǔ)710來(lái)開(kāi)啟事務(wù)。為了保證客戶(hù)機(jī)的聯(lián)合動(dòng)作不會(huì)引起在執(zhí)行中的事務(wù)消耗的資源超過(guò)一個(gè)全局限制,每一客戶(hù)機(jī)可以被分派一個(gè)限制,使得即使所有客戶(hù)機(jī)達(dá)到其限制,也不會(huì)超過(guò)全局限制。對(duì)每一客戶(hù)機(jī)的資源限制可以由客戶(hù)機(jī)、服務(wù)器、客戶(hù)機(jī)之間的協(xié)商、專(zhuān)用程序、計(jì)算機(jī)管理員等確定。為每一客戶(hù)機(jī)確定資源限制可以在該客戶(hù)機(jī)使用版本存儲(chǔ)參與事務(wù)之前發(fā)生,且可以動(dòng)態(tài)地修改。例如,如果客戶(hù)機(jī)715經(jīng)常阻塞而客戶(hù)機(jī)716至多消耗一定數(shù)量的資源,那么與客戶(hù)機(jī)716相關(guān)聯(lián)的資源限制可以被降低而分派給客戶(hù)機(jī)715的資源限制可以增加。
正如從前述具體實(shí)施方式
中可以看到,提供了用于限制版本存儲(chǔ)資源使用的方法和系統(tǒng)。盡管本發(fā)明是對(duì)多個(gè)修改和替換結(jié)構(gòu)敏感的,其中某些示出的實(shí)施例在附圖中顯示并如上詳細(xì)描述。然而,應(yīng)該理解,不存在將本發(fā)明限制在所揭示的特定形式的意圖,而正相反,旨在包含屬于本領(lǐng)域的精神和范圍內(nèi)的所有修改、替換構(gòu)造和等價(jià)物。
權(quán)利要求
1.一種含有計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),包括跟蹤在完成與版本存儲(chǔ)相關(guān)的多個(gè)事務(wù)中潛在會(huì)使用的資源數(shù)量;在啟動(dòng)一個(gè)新事務(wù)之前,確定是否有足夠的資源可用于完成所述新事務(wù);如果有足夠的資源可用,則啟動(dòng)所述新事務(wù);以及如果沒(méi)有足夠的資源可用,則等待直到有更多的資源可用。
2.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述多個(gè)事務(wù)中的至少一個(gè)是在進(jìn)行中的。
3.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括對(duì)所述多個(gè)事務(wù)潛在會(huì)使用的資源數(shù)量設(shè)置限制。
4.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述版本存儲(chǔ)在每一事務(wù)啟動(dòng)之前創(chuàng)建數(shù)據(jù)庫(kù)的一個(gè)新快照。
5.如權(quán)利要求4所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述快照在日志文件中作為差異來(lái)維護(hù)。
6.如權(quán)利要求4所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述數(shù)據(jù)庫(kù)在創(chuàng)建所述新快照之前含有第一狀態(tài),且所述第一狀態(tài)是可從所述日志文件中連同所述數(shù)據(jù)庫(kù)的第二狀態(tài)一起創(chuàng)建的。
7.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述等待直到有更多的資源可用包括阻塞一個(gè)線程直到資源可用。
8.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括獲取跟蹤在完成與版本存儲(chǔ)相關(guān)的多個(gè)事務(wù)中潛在會(huì)使用的資源的數(shù)量的數(shù)據(jù)結(jié)構(gòu)的鎖;修改所述數(shù)據(jù)結(jié)構(gòu)以包含關(guān)于所述新事務(wù)的信息;以及之后釋放所述鎖。
9.如權(quán)利要求8所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述數(shù)據(jù)結(jié)構(gòu)包括一雙向鏈表,且其中,修改所述數(shù)據(jù)結(jié)構(gòu)以包括關(guān)于所述新事務(wù)的信息包括添加一個(gè)節(jié)點(diǎn)至所述數(shù)據(jù)結(jié)構(gòu)。
10.如權(quán)利要求8所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述數(shù)據(jù)結(jié)構(gòu)將所述事務(wù)按時(shí)間排序。
11.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括完成一個(gè)事務(wù),且如果所述事務(wù)在仍在進(jìn)行中的其它事務(wù)中的任何一個(gè)之前啟動(dòng),那么修改在完成所述多個(gè)事務(wù)時(shí)潛在使用的資源的數(shù)量。
12.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括完成一個(gè)事務(wù),且如果所述事務(wù)在仍在進(jìn)行中的其它事務(wù)中的任何一個(gè)之后啟動(dòng),那么不修改潛在使用的資源的數(shù)量。
13.如權(quán)利要求12所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括修改與進(jìn)行中的前一事務(wù)相關(guān)聯(lián)的數(shù)據(jù)來(lái)添加已經(jīng)完成的事務(wù)潛在使用的資源的數(shù)量。
14.如權(quán)利要求13所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括完成所述前一事務(wù),并且修改潛在使用的資源數(shù)量來(lái)釋放由所述數(shù)據(jù)指示的一些資源。
15.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,跟蹤在完成與版本存儲(chǔ)相關(guān)的多個(gè)事務(wù)時(shí)潛在會(huì)使用的資源數(shù)量包括在一個(gè)信號(hào)上阻塞。
16.一種用于限制資源使用的方法,包括設(shè)置指示可以由進(jìn)行中的事務(wù)消耗的資源總量的限制;維護(hù)指示仍可由任何新的事務(wù)使用的剩余資源量的累計(jì);以及基于所述累計(jì)和完成一個(gè)新事務(wù)潛在所需的資源的需求數(shù)量,來(lái)確定是否存在足夠的資源來(lái)完成所述的新事務(wù)。
17.如權(quán)利要求16所述的方法,其特征在于,還包括,將所述累計(jì)初始化為所述限制。
18.如權(quán)利要求16所述的方法,其特征在于,還包括,如果存在足夠的資源來(lái)啟動(dòng)所述新事務(wù),則啟動(dòng)所述新事務(wù)。
19.如權(quán)利要求16所述的方法,其特征在于,確定是否存在足夠的資源來(lái)啟動(dòng)所述的新事務(wù)包括從所述累計(jì)中減去所需資源的數(shù)量來(lái)獲取一個(gè)結(jié)果,并判斷所述結(jié)果是否大于或等于0。
20.如權(quán)利要求16所述的方法,其特征在于,還包括,獲取一數(shù)據(jù)結(jié)構(gòu)上的鎖,并修改所述數(shù)據(jù)結(jié)構(gòu)。
21.如權(quán)利要求20所述的方法,其特征在于,所述數(shù)據(jù)結(jié)構(gòu)是根據(jù)進(jìn)行中的事務(wù)的啟動(dòng)時(shí)間排序的雙向鏈表。
22.如權(quán)利要求20所述的方法,其特征在于,還包括,確定所述雙向鏈表中與一剛完成的事務(wù)相關(guān)聯(lián)的節(jié)點(diǎn)是否在所述雙向鏈表的頭部。
23.如權(quán)利要求22所述的方法,其特征在于,如果所述節(jié)點(diǎn)在所述雙向鏈表的頭部,那么將所述累計(jì)增加由所述節(jié)點(diǎn)指示的數(shù)量。
24.如權(quán)利要求22所述的方法,其特征在于,如果所述節(jié)點(diǎn)不是在所述雙向鏈表的頭部,那么將由所述節(jié)點(diǎn)指示的資源添加到所述雙向鏈表中在所述節(jié)點(diǎn)之前的另一節(jié)點(diǎn),并將所述節(jié)點(diǎn)移除。
25.如權(quán)利要求16所述的方法,其特征在于。還包括,在一個(gè)事務(wù)完成之后增加所述累計(jì),并喚醒與由于沒(méi)有足夠的資源來(lái)啟動(dòng)而被阻塞的新事務(wù)相關(guān)聯(lián)的任何線程。
26.一種用于限制資源使用的系統(tǒng),包括第一客戶(hù)機(jī),它被安排成與一版本存儲(chǔ)交互,其中,所述第一客戶(hù)機(jī)還被安排成執(zhí)行動(dòng)作,包括獲取指示作為所述第一客戶(hù)機(jī)使用所述版本存儲(chǔ)參與事務(wù)的結(jié)果可以被消耗的資源的總量的第一限制;維護(hù)指示仍然可由所述第一客戶(hù)機(jī)啟動(dòng)的任何新事務(wù)使用的資源的剩余數(shù)量的第一總計(jì);以及基于所述第一總計(jì)和完成一新事務(wù)潛在需要的資源的需求數(shù)量,確定是否存在足夠的資源來(lái)啟動(dòng)所述新事務(wù)。
27.如權(quán)利要求26所述的系統(tǒng),其特征在于,還包括第二客戶(hù)機(jī),它被安排成與所述版本存儲(chǔ)交互,其中,所述第二客戶(hù)機(jī)還被安排成執(zhí)行動(dòng)作,包括獲取指示作為所述第二客戶(hù)機(jī)使用所述版本存儲(chǔ)參與事務(wù)的結(jié)果可以被消耗的資源的總量的第二限制;維護(hù)指示仍然可由所述第二客戶(hù)機(jī)啟動(dòng)的任何新事務(wù)使用的資源的剩余數(shù)量的第二總計(jì);以及基于所述第二總計(jì)和完成一新事務(wù)潛在需要的資源需求數(shù)量,確定是否存在足夠的資源來(lái)啟動(dòng)所述新事務(wù)。
28.如權(quán)利要求27所述的系統(tǒng),其特征在于,所述第一和第二限制是通過(guò)客戶(hù)機(jī)之間的協(xié)商獲得的。
29.如權(quán)利要求27所述的系統(tǒng),其特征在于,所述第一和第二限制是通過(guò)每一客戶(hù)機(jī)上的系統(tǒng)設(shè)置獲得的。
30.如權(quán)利要求27所述的系統(tǒng),其特征在于,所述第一和第二限制是通過(guò)用戶(hù)輸入獲得的。
31.如權(quán)利要求27所述的系統(tǒng),其特征在于,還包括,被安排成周期性地執(zhí)行并基于所述第一和第二總計(jì)的歷史調(diào)整第一和第二限制的程序。
32.如權(quán)利要求27所述的系統(tǒng),其特征在于,還包括,被安排成提供對(duì)所述版本存儲(chǔ)的訪問(wèn)的服務(wù)器。
33.如權(quán)利要求27所述的系統(tǒng),其特征在于,每一客戶(hù)機(jī)還被安排成與所述服務(wù)器通信,以設(shè)置指示可以由每一客戶(hù)機(jī)消耗的資源總量的每一客戶(hù)機(jī)的限制。
34.如權(quán)利要求26所述的系統(tǒng),其特征在于,獲取所述第一限制包括從第一客戶(hù)機(jī)上的存儲(chǔ)中檢索第一限制。
35.如權(quán)利要求26所述的系統(tǒng),其特征在于,獲取所述第一限制包括與服務(wù)器通信。
36.如權(quán)利要求26所述的系統(tǒng),其特征在于,所述版本存儲(chǔ)用于文件復(fù)制系統(tǒng)的。
全文摘要
用于限制對(duì)版本存儲(chǔ)的資源使用的方法和系統(tǒng)。限制指示了可以由進(jìn)行中的事務(wù)所消耗的資源的總量。維護(hù)了剩余資源的數(shù)量的累計(jì)。在一個(gè)新的事務(wù)啟動(dòng)之前,作出關(guān)于是否存在剩余的足夠資源來(lái)完成該新的事務(wù)的判斷。如果是,那么該事務(wù)啟動(dòng)且調(diào)整該累計(jì)。如果否,那么該事務(wù)等待直到更多資源可用。當(dāng)一個(gè)事務(wù)完成時(shí),如果它是進(jìn)行中的最老的事務(wù),那么釋放資源。否則,與該事務(wù)相關(guān)聯(lián)的資源不被釋放直到在該事務(wù)之前啟動(dòng)的所有事務(wù)完成。這保證了版本存儲(chǔ)的一個(gè)客戶(hù)機(jī)不會(huì)超過(guò)可由進(jìn)行中的事務(wù)所消耗的資源的限制。
文檔編號(hào)G06F9/50GK1766843SQ20051010855
公開(kāi)日2006年5月3日 申請(qǐng)日期2005年9月30日 優(yōu)先權(quán)日2004年10月7日
發(fā)明者R·普迪佩迪 申請(qǐng)人:微軟公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
晴隆县| 宝兴县| 福建省| 屯留县| 封开县| 门头沟区| 南靖县| 长宁县| 同德县| 区。| 长白| 怀来县| 乐安县| 从化市| 蓬安县| 澄江县| 丰原市| 乌鲁木齐县| 徐州市| 随州市| 宜昌市| 健康| 石泉县| 贡嘎县| 吴堡县| 宾阳县| 巴东县| 二连浩特市| 抚顺市| 米泉市| 兴宁市| 宁海县| 曲周县| 轮台县| 宁德市| 陈巴尔虎旗| 抚宁县| 慈溪市| 东至县| 久治县| 平远县|