十二、分布式數(shù)據(jù)庫(kù)
1.分布式數(shù)據(jù)庫(kù)的分類
分布式數(shù)據(jù)庫(kù),是根據(jù)它的管理系統(tǒng)(Distributed DBMS-DDBMS)進(jìn)行分類的。對(duì)DDBMS可以從四個(gè)不同角度來(lái)分類:
(1)從構(gòu)成的方式,可分為同構(gòu)型和異構(gòu)型兩類所謂同構(gòu)型,是指所有節(jié)點(diǎn)的局部DBMS都支持同一數(shù)據(jù)模式和數(shù)據(jù)語(yǔ)言。為使每個(gè)節(jié)點(diǎn)都掌握彼此的數(shù)據(jù)情況,需要增加網(wǎng)絡(luò)數(shù)據(jù)庫(kù)管理系統(tǒng)(NDBMS),各節(jié)點(diǎn)之間通過通信網(wǎng)絡(luò)形成統(tǒng)一的整體。同構(gòu)型的DDBMS對(duì)于并發(fā)控制、冗余數(shù)據(jù)的一致性等問題容易處理,但建庫(kù)的代價(jià)比較大。所謂異構(gòu)型系統(tǒng),是指在分布環(huán)境中各節(jié)點(diǎn)上的數(shù)據(jù)模型和數(shù)據(jù)語(yǔ)言都可能不同。異構(gòu)比同構(gòu)型系統(tǒng)實(shí)現(xiàn)起來(lái)要困難一些,為了在兩個(gè)節(jié)點(diǎn)上的局部DBMS之間進(jìn)行信息交換,就要對(duì)數(shù)據(jù)模式和數(shù)據(jù)語(yǔ)言進(jìn)行轉(zhuǎn)換和映射工作。
(2)按控制方式,可以分為集中式與分布式所謂集中控制的DDBM指所有事務(wù)都由一臺(tái)叫做中心計(jì)算機(jī)的節(jié)點(diǎn)進(jìn)行管理。分布控制的DDBMS,是指每個(gè)節(jié)點(diǎn)都保持DDBMS的一個(gè)副本來(lái)監(jiān)督和管理各節(jié)點(diǎn)及系統(tǒng)事務(wù),它將網(wǎng)絡(luò)目錄作為用戶數(shù)據(jù)庫(kù)存放于局部DB之中。
(3)從數(shù)據(jù)分布的角度,DDBMS又可分為分割式、部分重復(fù)式和完全重復(fù)式所謂分割式,是指每個(gè)節(jié)點(diǎn)只存儲(chǔ)DDB數(shù)據(jù)實(shí)體的部分子集,各節(jié)點(diǎn)的副本互不重疊。部分重復(fù)式,是指每個(gè)節(jié)點(diǎn)都存儲(chǔ)DDB數(shù)據(jù)實(shí)體的任意子集。完全重復(fù)式,是指每個(gè)節(jié)點(diǎn)都存儲(chǔ)整個(gè)DDB數(shù)據(jù)實(shí)體的副本。也有文獻(xiàn)把完全重復(fù)式稱為復(fù)制式。(4)從用戶的角度,DDBM可分為總體型和多重型。
2.分布式數(shù)據(jù)庫(kù)與單一數(shù)據(jù)庫(kù)的比較
(1)集中控制 在一個(gè)企業(yè)或單位范圍內(nèi)的信息資源上,對(duì)信息提供集中式控制的可能性,被認(rèn)為是采用數(shù)據(jù)庫(kù)技術(shù)的最大動(dòng)力之一,因?yàn)榧惺綌?shù)據(jù)庫(kù)是根據(jù)信息系統(tǒng)的演變和集中處理信息的需求開發(fā)出來(lái)的。
(2)數(shù)據(jù)獨(dú)立性 數(shù)據(jù)獨(dú)立性也曾經(jīng)被認(rèn)為是采用數(shù)據(jù)庫(kù)方法的主要?jiǎng)恿χ弧?shí)際上,數(shù)據(jù)獨(dú)立性意味著數(shù)據(jù)的實(shí)際結(jié)構(gòu)對(duì)應(yīng)用程序來(lái)講是透明的,應(yīng)用程序員只需要利用數(shù)據(jù)邏輯結(jié)構(gòu),即所謂概念模式來(lái)編寫程序。數(shù)據(jù)獨(dú)立性的主要優(yōu)點(diǎn)是應(yīng)用不受數(shù)據(jù)存儲(chǔ)的物理結(jié)構(gòu)變化的影響。在分布式數(shù)據(jù)庫(kù)中,數(shù)據(jù)的獨(dú)立性具有與傳統(tǒng)的集中式數(shù)據(jù)同等的重要性,然而,一種嶄新概念加進(jìn)了數(shù)據(jù)獨(dú)立性的一般概念之中,這就是分布式透明性。所謂分布式透明性,指的是在編寫程序時(shí)就好象數(shù)據(jù)沒有被分布一樣。這樣,無(wú)論把數(shù)據(jù)存儲(chǔ)到甲地或乙地,或者把數(shù)據(jù)從一個(gè)節(jié)點(diǎn)移到另一個(gè)節(jié)點(diǎn),都不會(huì)影響程序執(zhí)行的正確性和有效性,但是,必須指出,執(zhí)行速度或者效率卻受到了影響。眾所周知,通過具有不同形式的數(shù)據(jù)描述和它們之間的映射的多層體系結(jié)構(gòu),曾為傳統(tǒng)的數(shù)據(jù)庫(kù)提供了獨(dú)立性,為此目的,開發(fā)出了概念模式、存儲(chǔ)模式和外部模式等概念。利用類似的方法,我們可以通過采用新層次和新模式,在分布式數(shù)據(jù)庫(kù)中可獲得分布式透明性。分布式透明性是分布式數(shù)據(jù)庫(kù)系統(tǒng)的主要目標(biāo)之一。
(3)降低冗余 在傳統(tǒng)數(shù)據(jù)庫(kù)系統(tǒng)中,盡可能地降低冗余度是它的主要目標(biāo)之一。這有兩個(gè)原因:首先,通過只用一個(gè)正本,可以自動(dòng)地避免同一邏輯數(shù)據(jù)中幾個(gè)副本之間的不一致性。其次,用降低冗余度來(lái)節(jié)約存儲(chǔ)空間。通過共享數(shù)據(jù)的方式,即通過允許幾個(gè)應(yīng)用訪問同一文件和記錄可以達(dá)到降低冗余度的目的。但是,在分布式數(shù)據(jù)庫(kù)中,把數(shù)據(jù)的冗余看成是所需要的特性。這有幾個(gè)原因:首先,如果在需要冗余的所有節(jié)點(diǎn)都復(fù)制數(shù)據(jù),則可以增加應(yīng)用的局部性。其次,可以增加分布式數(shù)據(jù)庫(kù)系統(tǒng)的有效性和可靠性。因?yàn)椋绻麖?fù)制數(shù)據(jù),則一個(gè)節(jié)點(diǎn)上的故障不會(huì)停止其它節(jié)點(diǎn)上應(yīng)用的執(zhí)行。在一般情況下,為傳統(tǒng)集中式環(huán)境所規(guī)定的克服冗余的原因,在分布式環(huán)境中仍是有效的。因此,在分布式數(shù)據(jù)庫(kù)中,對(duì)冗余度的評(píng)價(jià)要選擇一種折衷方案,不能一概而論。一般地說(shuō),復(fù)制數(shù)據(jù)項(xiàng)的方便程度是隨著應(yīng)用所執(zhí)行的檢索訪問與更新訪問的比率提高而增加。數(shù)據(jù)復(fù)制便利程度的提高,是因?yàn)榫哂幸粋(gè)項(xiàng)目多個(gè)副本,檢索可以在任一副本上進(jìn)行,而更新卻必須在所有副本上一致地進(jìn)行。
(4)有效訪問 復(fù)雜的訪問結(jié)構(gòu),如輔助索引,文件間的鏈接等,都是傳統(tǒng)數(shù)據(jù)庫(kù)所采用的重要技術(shù),對(duì)這些結(jié)構(gòu)的支持是數(shù)據(jù)庫(kù)管理系統(tǒng)DBMS極為重要的組成部分。提供復(fù)雜訪問結(jié)構(gòu)的原因,是為了提高存取數(shù)據(jù)的效率。
(5)完整性、恢復(fù)和并發(fā)控制 在數(shù)據(jù)庫(kù)理論中,盡管完整性、恢復(fù)和并發(fā)控制等所涉及的問題是不同的,但它們之間相互聯(lián)系還是很多的,一般來(lái)說(shuō),完整性、恢復(fù)和并發(fā)控制等問題的解決,在很大程度上取決于所提供的事務(wù)的結(jié)構(gòu)形式。
(6)保密性和安全性 在傳統(tǒng)數(shù)據(jù)庫(kù)中,具有集中式控制的數(shù)據(jù)庫(kù)管理員能保證只執(zhí)行那些授權(quán)的數(shù)據(jù)訪問。但應(yīng)當(dāng)指出,集中式數(shù)據(jù)庫(kù)本身比過去處理單獨(dú)文件的舊方法更難于實(shí)現(xiàn)數(shù)據(jù)的保密性和安全性。在分布式數(shù)據(jù)庫(kù)中,局部數(shù)據(jù)庫(kù)管理員面臨的一些主要問題,與傳統(tǒng)數(shù)據(jù)庫(kù)管理員面臨的問題一樣。但是,分布式數(shù)據(jù)庫(kù)的兩個(gè)獨(dú)特方面值得一提:首先,在具有極高度節(jié)點(diǎn)自主權(quán)的分布式數(shù)據(jù)庫(kù)中,局部數(shù)據(jù)的擁有者認(rèn)為比較安全,因?yàn)樗麄兡茏灾鞯貙?shí)施自己的安全措施,以履行集中式數(shù)據(jù)庫(kù)管理員的職責(zé)。其次,安全性問題,一般是分布式系統(tǒng)的固有問題,因分布式系統(tǒng)是通過通信網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)分布式控制的,而通信網(wǎng)絡(luò)本身就在保護(hù)數(shù)據(jù)的安全性和保密性方面存在著弱點(diǎn)。通過網(wǎng)絡(luò)偷看、亂改別人的數(shù)據(jù)難以完全避免。
3.分布式數(shù)據(jù)庫(kù)管理系統(tǒng)(DDBMS)
在目前分析DDBMS的性能時(shí),應(yīng)該把商品化系統(tǒng)和先進(jìn)的研究樣機(jī)區(qū)分開來(lái),但是可以預(yù)料,某些先進(jìn)的研究樣機(jī)中試驗(yàn)的特性,可能會(huì)應(yīng)用到將來(lái)的商品化系統(tǒng)中去的。本節(jié)簡(jiǎn)要敘述分布式數(shù)據(jù)庫(kù)管理系統(tǒng)的基本性能,并就用什么樣的方法使得分布式數(shù)據(jù)庫(kù)這個(gè)新技術(shù)商品化的問題談一點(diǎn)看法。從目前看,世界上幾各已經(jīng)商品化的分布式系統(tǒng)是由集中式數(shù)據(jù)庫(kù)管理系統(tǒng)的銷售廠商開發(fā)出來(lái)的。這些分布式數(shù)據(jù)庫(kù)管理系統(tǒng),包括擴(kuò)充集中式DBMS時(shí)所附加的部件。分布式功能的擴(kuò)充是通過裝配在計(jì)算機(jī)網(wǎng)絡(luò)中不同節(jié)點(diǎn)上的DBMS之間所提供的通信和合作來(lái)實(shí)現(xiàn)的。在這種情況下建立分布式數(shù)據(jù)庫(kù)通常所必須的軟件部分是:
(1)數(shù)據(jù)庫(kù)管理部分(DB);
(2)數(shù)據(jù)通信部分(DC);
(3)數(shù)據(jù)字典(DD),它能用來(lái)表示有關(guān)網(wǎng)絡(luò)中數(shù)據(jù)分布的信息;
(4)分布式數(shù)據(jù)庫(kù)部分(DDB)。
十三、分布式ORACLE系統(tǒng)簡(jiǎn)介
1.分布式體系結(jié)構(gòu)的ORACLE
1986年,ORACLE公司推出了它的分布式體系結(jié)構(gòu)的ORACLE數(shù)據(jù)庫(kù)系統(tǒng)。該系統(tǒng)是由分布式數(shù)據(jù)庫(kù)管理系統(tǒng)(ORACLE RDBMS)、支持多種操作系統(tǒng)和通信協(xié)議的分布式處理環(huán)境軟件SQL*NET、以及與非ORACLE RDBMS聯(lián)接的軟件SQL*CONNECT這三部分組成的一個(gè)軟件群。分布式ORACLE采用了典型的開放式體系結(jié)構(gòu),對(duì)環(huán)境的適應(yīng)范圍非常廣泛,可適應(yīng)多種通信協(xié)議、多種操作系統(tǒng)、多種硬件環(huán)境及多種DBMS和數(shù)據(jù)源。
2.網(wǎng)絡(luò)ORACLE的連接過程
網(wǎng)絡(luò)ORACLE的連接過程大致包括以下幾步:
(1)確認(rèn)網(wǎng)絡(luò)結(jié)點(diǎn)是否安裝了SQL*NET,如未安裝,則需執(zhí)行:*$SYS@ORACLE:NCONFIG.COM≠進(jìn)行安裝,并且使用SGAPAD.COM重新鏈接。
(2)確認(rèn)安裝中選取的網(wǎng)絡(luò)驅(qū)動(dòng)器與操作系統(tǒng)環(huán)境下所配置的通信協(xié)議是否相符。
(3)待(1)、(2)兩項(xiàng)均確認(rèn)后,則可在服務(wù)器(Server)結(jié)點(diǎn)上建立一個(gè)命令文件。這個(gè)命令文件主要完成以下工作:指定ORACLE系統(tǒng)標(biāo)識(shí)碼SID,從而確定將哪一個(gè)ORACLE RDBMS作為服務(wù)器。這是因?yàn)橥瑱C(jī)上可運(yùn)行多個(gè)ORACLE RDBMS,指定方式為:$ASSIGN〈SID標(biāo)識(shí)碼〉ORACLE$SID指定ORACLE系統(tǒng)所在目錄:$ASSIGN〈目錄名〉SYS$ORACLE指定SQL*NET執(zhí)行代碼的邏輯名$ORASRV=SYS$ORACLE:ORASRV.EXE啟動(dòng)SQL*NET的執(zhí)行代碼$ORASRV DECNET-NSP:
(4)待完成以后,用戶即可進(jìn)行遠(yuǎn)程訪問。(注意兩個(gè)結(jié)點(diǎn)上的ORACLE系統(tǒng)應(yīng)處于開啟狀態(tài))
(5)為了加強(qiáng)網(wǎng)絡(luò)通信管理和避免沖突等原因,可以通過VAX/VMS網(wǎng)絡(luò)控制程序NCP建立一和于ORACLE網(wǎng)絡(luò)通信的缺省帳號(hào)。
3.網(wǎng)絡(luò)ORACLE的使用
除了以下實(shí)用程序以外,其它ORACLE實(shí)用程序和軟件工具均可以通過SQL*NET訪問遠(yuǎn)程結(jié)點(diǎn)的ORACLE系統(tǒng)IOR AJI僅供本地使用。另外,用戶通過各種語(yǔ)言編寫的應(yīng)用程序也可以進(jìn)行遠(yuǎn)程存取。用戶遠(yuǎn)程存取的方式非常簡(jiǎn)單,僅需要在“用戶名/口令”(ORACLE的合法用戶)后面附上結(jié)點(diǎn)信息。
4.分布式查詢
分布式查詢和數(shù)據(jù)傳輸,主要指用戶在前端機(jī)上執(zhí)行本地的進(jìn)程通過SQL語(yǔ)句或SQLplus命令查詢或傳輸遠(yuǎn)程結(jié)點(diǎn)上的數(shù)據(jù)。由于網(wǎng)絡(luò)ORACLE系統(tǒng)的分布式查詢功能很強(qiáng),用戶可以同時(shí)查詢多個(gè)結(jié)點(diǎn)上的數(shù)據(jù)庫(kù)數(shù)據(jù)。傳輸數(shù)據(jù)功能用于兩個(gè)結(jié)點(diǎn)之間數(shù)據(jù)及定義的復(fù)制,下面將分別介紹。ORACLE系統(tǒng)分布式查詢的功能使得一個(gè)結(jié)點(diǎn)上的用戶可以通過SQL查詢語(yǔ)句訪問其它結(jié)點(diǎn)數(shù)據(jù)庫(kù)的數(shù)據(jù)。并且用戶還可以同時(shí)存取訪問多個(gè)結(jié)點(diǎn)(包括本地結(jié)點(diǎn))的數(shù)據(jù),從而使數(shù)據(jù)庫(kù)的查詢功能大大增強(qiáng)。
(1)數(shù)據(jù)庫(kù)鏈路(DATABASE LINK)為了使分布式查詢操作更加簡(jiǎn)單方便,ORACLE RDBMS為用戶提供了一個(gè)新的數(shù)據(jù)定義方式:數(shù)據(jù)庫(kù)鏈路。用戶可以通過數(shù)據(jù)庫(kù)鏈路定義,在本地結(jié)點(diǎn)和遠(yuǎn)程之間進(jìn)行查詢和連接。進(jìn)行遠(yuǎn)程訪問的用戶需要明確:遠(yuǎn)程數(shù)據(jù)庫(kù)所在的結(jié)點(diǎn);遠(yuǎn)程結(jié)點(diǎn)上的哪個(gè)數(shù)據(jù)庫(kù);遠(yuǎn)程數(shù)據(jù)庫(kù)的哪個(gè)用戶。數(shù)據(jù)庫(kù)鏈路即用于標(biāo)識(shí)以上內(nèi)容。用戶通過SQL的CREATE DATABASE LINK語(yǔ)句定義數(shù)據(jù)庫(kù)鏈路。其格式為:CREATE[PUBLIC]DATABASE LINK鏈路名CONNECT TO用戶名INENTIFIED BY口令USING‘驅(qū)動(dòng)器前綴:結(jié)點(diǎn)名““操作系統(tǒng)用戶名口令”””::“““TASK=ORDN后綴.COM”””;如果用戶事先定義一個(gè)邏輯名:$ASSIGN結(jié)點(diǎn)名,“““操作系統(tǒng)用戶名口令”””::“““TASK=ORDN后綴.COM”””,邏輯名那么CREATE DATABASE LINK就變得十分簡(jiǎn)潔:CREATE[PUBLIC]DATABASE LINK鏈路名CONNECT TO用戶名IDENTIFIED BY口令USING‘驅(qū)動(dòng)器前綴:邏輯名’;這里PUBLIC代表公用數(shù)據(jù)庫(kù)鏈路,只有DBA才能使用PUBLIC限定詞。
(2)遠(yuǎn)程查詢操作在數(shù)據(jù)庫(kù)鏈路定義以后,遠(yuǎn)程查詢就變得非常簡(jiǎn)單和方便。用戶訪問查詢數(shù)據(jù)庫(kù)的表或視圖時(shí),只要在表名或視圖名后面附上數(shù)據(jù)庫(kù)鏈路名即可通過SELECT語(yǔ)句進(jìn)行查詢。其形式為:SELECT列表達(dá)式[,列表達(dá)式,…] FROM表名@數(shù)據(jù)庫(kù)鏈路名[,表名@數(shù)據(jù)庫(kù)鏈路名,…] [WHERE邏輯表達(dá)式];
(3)定義同義名用戶可以用同義名來(lái)簡(jiǎn)化一些繁瑣的表名或視圖名。對(duì)于遠(yuǎn)程查詢操作,用戶也可以為遠(yuǎn)程數(shù)據(jù)庫(kù)的表名或視圖名定義相應(yīng)的同義名。
(4)連接操作在遠(yuǎn)程查詢中,用戶可以連接相同(或不同)結(jié)點(diǎn)上數(shù)據(jù)庫(kù)中的表。連接(JOIN)操作可以針對(duì)以下情況:同一數(shù)據(jù)庫(kù)中的兩個(gè)表或多個(gè)表;同一結(jié)點(diǎn)不同數(shù)據(jù)庫(kù)中的兩個(gè)表或多個(gè)表;不同結(jié)點(diǎn)上數(shù)據(jù)庫(kù)中的兩個(gè)表或多個(gè)表;
(5)查詢遠(yuǎn)程數(shù)據(jù)庫(kù)中其他用戶的數(shù)據(jù)用戶在通過數(shù)據(jù)庫(kù)鏈路進(jìn)行遠(yuǎn)程查詢時(shí),可以訪問其他用戶的數(shù)據(jù)。數(shù)據(jù)庫(kù)鏈路的定義中指定一個(gè)遠(yuǎn)程用戶名及口令,這個(gè)用戶名被稱為鏈路用戶名。上面所述的“其他用戶”即指非鏈路用戶。如果鏈路用戶具有訪問其他某一用戶,記為用戶A的權(quán)限,那么,Client用戶就可以通過數(shù)據(jù)庫(kù)鏈路查詢服務(wù)器用戶A中的數(shù)據(jù)。
(6)遠(yuǎn)程子查詢前面介紹的是基于主查詢的遠(yuǎn)程訪問。事實(shí)上,SQL語(yǔ)句中的子查詢(Sub-query)也可以訪問遠(yuǎn)程結(jié)點(diǎn)的數(shù)據(jù)庫(kù)數(shù)據(jù)。這種子查詢稱為遠(yuǎn)程子查詢。可嵌入查詢的語(yǔ)句有:SELECT INSERT UPDATE CREATE TABLE CREATE VIEW
5.遠(yuǎn)程數(shù)據(jù)傳輸
目前網(wǎng)絡(luò)ORACLE系統(tǒng)尚不能通過INSERT,UPDATE語(yǔ)句更新遠(yuǎn)程結(jié)點(diǎn)的數(shù)據(jù)庫(kù)數(shù)據(jù)。但是ORACLE提供結(jié)點(diǎn)之間傳輸數(shù)據(jù)庫(kù)數(shù)據(jù)的能力。SQL/plus的COPY命令將用于實(shí)現(xiàn)這一功能。用戶使用COPY命令可以進(jìn)行從一個(gè)結(jié)點(diǎn)(稱為源結(jié)點(diǎn))到另一結(jié)點(diǎn)(稱為目標(biāo)結(jié)點(diǎn))之間的數(shù)據(jù)傳輸或復(fù)制。使用COPY命令與數(shù)據(jù)庫(kù)鏈路的定義類似,需要反映定結(jié)點(diǎn)名、數(shù)據(jù)庫(kù)(即命令文件和“用戶名/口令”。其中源描述和目標(biāo)描述分別用于指示源結(jié)點(diǎn)目標(biāo)結(jié)點(diǎn)上的結(jié)點(diǎn)名、數(shù)據(jù)庫(kù)(即命令文件)和“用戶名/口令”,下面是COPY命令的基本形式:COPY[FROM源名][TO目標(biāo)名] {APPEND|CREATE|INSERT|REPLACE} 表名[(列名[,列名…])] USING SELECT語(yǔ)句其中源名和目標(biāo)名分別用于指定源結(jié)點(diǎn)和目標(biāo)結(jié)點(diǎn)上的結(jié)點(diǎn)名、數(shù)據(jù)庫(kù)和“用戶名/口令”,如:用戶名/口令@驅(qū)動(dòng)器前綴:結(jié)點(diǎn)名“““用戶名口令”””::“““TASK=ORDN后綴.COM”””;如果事先分配了邏輯名,則源描述和目標(biāo)描述會(huì)變得更簡(jiǎn)潔一些。如果源結(jié)點(diǎn)為本地,則COPY命令可略去FROM子句。如果目標(biāo)結(jié)點(diǎn)為本地,則可除去TO子句。COPY命令將傳送數(shù)據(jù)到目標(biāo)數(shù)據(jù)庫(kù)指定表。具體傳輸?shù)臄?shù)據(jù)是子查詢的結(jié)果。其中APPEND、CREATE、INSERT和REPLACE限定詞用于指定傳輸?shù)姆绞?APPEND 將傳輸?shù)臄?shù)據(jù)加在指定表中。如果該表不存在,則先建表,再加入;INSERT 將傳輸?shù)臄?shù)據(jù)加在指定的表中。如果該表不存在,則先建表,再加入數(shù)據(jù);CREATE 建立指定的表,并加入數(shù)據(jù),如果該表存在,則出錯(cuò);REPLACE 將傳輸數(shù)據(jù)替換原表中已有的數(shù)據(jù)。
希望與更多計(jì)算機(jī)等級(jí)考試的網(wǎng)友交流,請(qǐng)進(jìn)入計(jì)算機(jī)等級(jí)考試論壇
更多信息請(qǐng)?jiān)L問:考試吧計(jì)算機(jī)等級(jí)考試欄目
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |