【云圖說】第132期 小云妹帶您快速玩轉(zhuǎn)RDS實例操作(2)——刪除與退訂
947
2025-04-04
分片
分片是一種用于在多臺計算機之間分配數(shù)據(jù)的方法。MongoDB使用分片來支持具有非常大的數(shù)據(jù)集和高吞吐量操作的部署。
具有大數(shù)據(jù)集或高吞吐量應(yīng)用程序的數(shù)據(jù)庫系統(tǒng)對單個服務(wù)器的具有很大挑戰(zhàn)。例如,高查詢率可能會耗盡服務(wù)器的CPU容量。大于系統(tǒng)RAM的工作集大小會增加磁盤驅(qū)動器的I / O容量。
解決系統(tǒng)增長的方法有兩種:垂直擴容和水平擴展。
垂直擴容涉及增加單個服務(wù)器的容量,例如使用功能更強大的CPU,添加更多RAM或增加存儲空間量??捎眉夹g(shù)的局限性可能會限制一臺計算機對于給定的工作負載而言功能不足。此外,基于云的提供程序具有基于可用硬件配置的嚴(yán)格上限。結(jié)果,垂直縮放有一個實際的最大值。
水平擴展涉及劃分系統(tǒng)數(shù)據(jù)集并在多臺服務(wù)器上加載,并添加其他服務(wù)器以根據(jù)需要增加容量。雖然單臺計算機的整體速度或容量可能不高,但是每臺計算機只能處理一部分整體工作負載,因此與單臺高速大容量服務(wù)器相比,可能提供更高的效率。擴展部署的容量僅需要根據(jù)需要添加其他服務(wù)器,這可以比單臺機器的高端硬件降低總體成本。折衷方案是增加基礎(chǔ)結(jié)構(gòu)和部署維護的復(fù)雜性。
MongoDB通過分片支持水平擴展。
群集分片
MongoDB群集分片由以下組件組成:
shard:每個shard包含被分片數(shù)據(jù)的子集。每個分片都可以部署為副本集。
mongos:mongos充當(dāng)查詢路由器,在客戶端應(yīng)用程序和分片群集之間提供接口。從MongoDB 4.4開始,mongos可以支持??hedged reads以最大程度地減少延遲。
config服務(wù)器:配置服務(wù)器存儲集群的元數(shù)據(jù)和配置設(shè)置。
下圖描述了分片群集中組件的交互:
MongoDB在collection級別分片數(shù)據(jù),從而將收集數(shù)據(jù)分布在集群中的各個分片上。
Shard
shard包含被分片的數(shù)據(jù)的一個子集分片簇。群集的分片一起保存了群集的整個數(shù)據(jù)集。
從MongoDB 3.6起,必須將分片部署為replica set,以提供冗余和高可用性。
用戶,客戶端或應(yīng)用程序應(yīng)僅直接連接到分片以執(zhí)行本地管理和維護操作。
在單個分片上執(zhí)行查詢只會返回一部分?jǐn)?shù)據(jù)。連接到mongos以執(zhí)行集群級別的操作,包括讀取或?qū)懭氩僮鳌?/p>
重要:MongoDB不保證任何兩個連續(xù)的chunk?都駐留在單個分片上。
主分片
分片群集中的每個數(shù)據(jù)庫都有一個主分片,其中包含該數(shù)據(jù)庫的所有未分片集合。每個數(shù)據(jù)庫都有其自己的主分片。主分片與副本集中的主分片沒有任何關(guān)系。
mongos當(dāng)創(chuàng)建新數(shù)據(jù)庫時,通過在數(shù)據(jù)量最少的集群中選擇分片,該選擇器將選擇主分片。?mongos將命令totalSize返回的字段?listDatabase用作選擇條件的一部分。
要更改數(shù)據(jù)庫的主分片,請使用movePrimary命令。遷移主分的過程可能需要很長時間才能完成,在遷移完成之前,無法訪問有關(guān)聯(lián)的集合。根據(jù)遷移的數(shù)據(jù)量,遷移可能會影響整個群集操作。在嘗試更改主分片之前,請考慮對群集操作和網(wǎng)絡(luò)負載的影響。
當(dāng)您使用以前用作副本集的分片部署新的碎片群集時,所有現(xiàn)有數(shù)據(jù)庫將繼續(xù)駐留在其原始副本集上。隨后創(chuàng)建的數(shù)據(jù)庫可以駐留在集群中的任何分片上。
Shard Status
使用 sh.status() 方法來查看集群的基本信息(包括哪個shard是數(shù)據(jù)庫的主shard以及跨shard的塊分布)。
分片群集安全性
使用內(nèi)部/成員身份驗證可以加強集群內(nèi)部的安全性,并防止未經(jīng)授權(quán)的集群組件訪問集群。您必須mongod使用適當(dāng)?shù)陌踩O(shè)置啟動集群中的每個服務(wù)器,以強制執(zhí)行內(nèi)部身份驗證。
分片本地用戶
每個分片均支持基于角色的訪問控制?(RBAC),用于限制對分片數(shù)據(jù)和操作的未授權(quán)訪問。mongod?使用--auth強制RBAC的選項啟動副本集中的每個副本。另外,對群集內(nèi)部安全性強制執(zhí)行內(nèi)部/成員身份驗證也可以通過RBAC進行用戶訪問控制。
每個分片都有其自己的分片本地用戶。這些用戶不能用于其他分片,也不能用于通過進行連接mongos。
Config Servers(元數(shù)據(jù))
重要:從3.4開始,mongod?不再支持SCCC。在將分片群集升級到3.4之前,必須將配置服務(wù)器從SCCC轉(zhuǎn)換為CSRS。
配置服務(wù)器存儲分片群集的元數(shù)據(jù)。元數(shù)據(jù)反映分片群集中所有數(shù)據(jù)和組件的狀態(tài)和組織。元數(shù)據(jù)包括每個分片上的塊列表以及定義塊的范圍。
該mongos實例緩存此數(shù)據(jù),并將其用于路由讀取和在正確的sharad進行寫入。mongos?當(dāng)集群的元數(shù)據(jù)發(fā)生更改時(例如Chunk Splits或添加shard)會更新緩存。分片也可以從配置服務(wù)器讀取chunk元數(shù)據(jù)。
配置服務(wù)器還存儲身份驗證配置信息,例如基于角色的訪問控制或群集的內(nèi)部身份驗證設(shè)置。
MongoDB還使用配置服務(wù)器來管理分布式鎖。
每個分片群集必須具有自己的配置服務(wù)器。不要將相同的配置服務(wù)器用于不同的分片群集。
警告
在配置服務(wù)器上執(zhí)行的管理操作可能會對分片群集的性能和可用性產(chǎn)生重大影響。根據(jù)受影響的配置服務(wù)器的數(shù)量,群集可能在一段時間內(nèi)處于只讀或脫機狀態(tài)。
副本集配置服務(wù)器
在版本3.4中更改。
從MongoDB 3.2開始,分片群集的配置服務(wù)器可以部署為副本集(CSRS),而不是三個鏡像配置服務(wù)器(SCCC)。為配置服務(wù)器使用副本集可提高配置服務(wù)器之間的一致性,因為MongoDB可以利用配置文件的標(biāo)準(zhǔn)副本集讀寫協(xié)議。另外,將副本集用于配置服務(wù)器允許分片群集具有3個以上的配置服務(wù)器,因為副本集最多可具有50個成員。要將配置服務(wù)器部署為副本集,配置服務(wù)器必須運行WiredTiger存儲引擎。
當(dāng)用于配置服務(wù)器時,以下限制適用于副本集配置:
不允許使用仲裁者。
不允許使用延時節(jié)點。
必須建立索引(即,任何成員都不可將?buildIndexes設(shè)置設(shè)置為false)。
在配置服務(wù)器讀取和寫入操作
配置服務(wù)器上要有admin數(shù)據(jù)庫和config數(shù)據(jù)庫。
admin數(shù)據(jù)庫包含與身份驗證和授權(quán)有關(guān)的集合以及其他供內(nèi)部使用system.*。的集合。
配置數(shù)據(jù)庫包含集合(分片群集的元數(shù)據(jù)的集合)。當(dāng)元數(shù)據(jù)發(fā)生更改時(例如,在塊遷移或塊拆分之后),MongoDB會將數(shù)據(jù)寫入配置數(shù)據(jù)庫。
用戶應(yīng)避免在正常操作或維護過程中直接寫入config數(shù)據(jù)庫。
當(dāng)寫入配置服務(wù)器,MongoDB使用一個"majority"的write concern。
MongoDB從admin數(shù)據(jù)庫中讀取身份驗證和授權(quán)數(shù)據(jù)以及其他內(nèi)部用途。
MongoDB在mongos?開始或元數(shù)據(jù)更改后(例如在塊遷移之后)從config數(shù)據(jù)庫讀取。分片還從配置服務(wù)讀取塊元數(shù)據(jù)。
從副本集配置服務(wù)讀取數(shù)據(jù)時,MongoDB使用"majority"的Read Concern。
配置服務(wù)器可用性
如果配置服務(wù)副本集primary不可用,將無法選舉primary,則集群的元數(shù)據(jù)將變?yōu)橹蛔x。您仍然可以從分片讀取和寫入數(shù)據(jù),但是在副本集可以選擇主副本之前,不會發(fā)生任何塊遷移或塊拆分。
在分片簇,mongod和mongos實例監(jiān)控分片集群中的副本集(例如shard replica sets, config server replica set)。
如果所有配置服務(wù)器都不可用,則群集可能無法運行。為了確保配置服務(wù)器保持可用和完整,配置服務(wù)器的備份至關(guān)重要。與集群中存儲的數(shù)據(jù)相比,配置服務(wù)器上的數(shù)據(jù)很小,并且配置服務(wù)器的活動負載相對較低。
分片群集的元數(shù)據(jù)
配置服務(wù)器將元數(shù)據(jù)存儲在配置數(shù)據(jù)庫中。
重要
config在配置服務(wù)器上進行任何維護之前,請始終備份數(shù)據(jù)庫。
Mongos(路由)
MongoDB 的mongos實例路由查詢并將操作寫入分片群集中的分片。mongos從應(yīng)用程序的角度來看,它是分片群集的唯一接口。應(yīng)用程序無法與shard直接連接或通信。
mongos通過緩存來自配置服務(wù)器的元數(shù)據(jù)來跟蹤是哪個shard上的數(shù)據(jù)。mongos使用元數(shù)據(jù)將操作從應(yīng)用程序和客戶端路由到mongod實例。mongos沒有持久狀態(tài),消耗的系統(tǒng)資源最少。
最常見的做法是在與應(yīng)用服務(wù)器相同的系統(tǒng)上運行mongos實例,但是您可以在shard或其他專用資源上維護mongos實例。
路由和結(jié)果進程(Routing And Results Process)
mongos實例路由查詢到集群:
確定必須接收查詢的分片列表。
在所有目標(biāo)分片上建立游標(biāo)。
mongos合并來自每個target shard的數(shù)據(jù),并返回結(jié)果的文檔。在mongos檢索結(jié)果之前,對每個shard執(zhí)行某些查詢操作,例如排序。
在版本3.6中更改:對于在多個分片上運行的聚合操作,如果這些操作不需要在數(shù)據(jù)庫的主分片上運行,則這些操作可能會將結(jié)果路由回到mongos來合并結(jié)果。
在兩種情況下,mongod無法進行管道操作。
第一種情況發(fā)生在拆分管道的合并部分包含必須在主分片上運行的階段時。例如,如果$lookup要求訪問與正在運行聚合的分片集合位于同一數(shù)據(jù)庫中的未分片集合,則合并必須在主分片上運行。
第二種情況發(fā)生在拆分管道的合并部分包含可以將臨時數(shù)據(jù)寫入磁盤的stage時,例如$group,并且客戶機指定了owDiskUse:true。在這種情況下,假設(shè)合并管道中沒有其他階段需要主分片,則合并將在聚合目標(biāo)分片集中隨機選擇的分片上運行。
有關(guān)如何在分片集群查詢的組件之間拆分聚合工作的更多信息,請使用解釋:正確aggregation()調(diào)用的參數(shù)。返回將包括三個json對象。mergeType顯示合并階段發(fā)生的位置(“primaryShard”、“anyShard”或“mongos”)。splitPipeline顯示管道中的哪些操作在單個碎片上運行。碎片顯示每個碎片所做的工作。
在某些情況下,當(dāng)分片鍵或分片鍵的前綴是查詢的一部分時,會mongos執(zhí)行??targeted operation,將查詢路由到集群中的分片的子集。
mongos對不包含分片?鍵的查詢執(zhí)行廣播操作(?broadcast operation),將查詢路由到集群中的所有分片。確實包含分片鍵的某些查詢可能仍會導(dǎo)致廣播操作,具體取決于群集中數(shù)據(jù)的分布和查詢的選擇性。
如何mongos處理查詢修飾符
如果查詢的結(jié)果未排序,則mongos?實例將打開結(jié)果游標(biāo),該游標(biāo)將對分片上的所有游標(biāo)進行“輪循”。
如果查詢使用limit()cursor方法限制了結(jié)果集的大小?,則mongos?實例將該限制傳遞給分片,然后將該限制重新應(yīng)用于結(jié)果,然后再將結(jié)果返回給客戶端。
如果查詢使用skip()游標(biāo)方法指定要跳過的記錄數(shù),mongos將無法將跳過傳遞給shard,而是從shard中檢索未跳過的結(jié)果,并在組裝完整結(jié)果時跳過適當(dāng)數(shù)量的文檔。
當(dāng)與limit()一起使用時,mongos會將limit加上skip()的值傳遞給shard,以提高這些操作的效率。
Read Preference?和分片
對于分片群集,從分片讀取時,mongos應(yīng)用?read preference?。所選成員受?read preference?和?replication.localPingThresholdMs設(shè)置的支配,并針對每個操作進行重新評估。
從版本4.4開始,mongos實例可以對使用非主要讀取首選項的讀取進行hedged reads。對于hedged reads,mongos實例將讀取操作路由到每個查詢的shard的兩個副本集成員,并返回第一個響應(yīng)的結(jié)果。
hedged reads是讀取首選項的一部分,每個操作都指定了限制讀取。非主要讀取首選項支持hedged reads。
要為非主讀取首選項指定限制讀取,請參閱驅(qū)動程序讀取首選項API文檔。
Read preference nearest在默認情況下啟用hedged Read選項。
默認情況下,mongos實例支持使用hedged reads。要關(guān)閉mongos實例對hedged reads的支持,請參閱readHedgingMode參數(shù)。如果hedged reads支持為off,mongos則無論hedge為讀取首選項指定了什么選項,都不使用hedged reads。
Targeted Operations vs. Broadcast Operations
通常,分片環(huán)境中最快的查詢是mongos使用分片鍵和配置服務(wù)器中的群集元數(shù)據(jù)路由到單個分片的查詢?。這些目標(biāo)操作使用分片鍵值來定位滿足查詢文檔的分片或分片子集。
對于不包含分mongos片鍵的查詢,必須查詢所有分片,等待它們的響應(yīng),然后將結(jié)果返回給應(yīng)用程序。這些“分散/聚集”查詢可能是長時間運行的操作。
Broadcast Operations
Targeted Operations
索引使用
如果查詢不包含分片鍵,則?mongos必須將查詢作為“分散/聚集”操作發(fā)送給所有分片。每個shard都會反過來,使用任何的碎片關(guān)鍵指標(biāo)或其他更有效的指標(biāo)來滿足查詢。
如果查詢包含引用由分片鍵和輔助索引索引的字段的多個子表達式,則?mongos可以將查詢路由到特定分片,并且分片將使用使它最有效地執(zhí)行的索引。
其他
從MongoDB 4.0開始,mongos嘗試連接功能兼容版本(fCV)大于的mongod實例?時,二進制文件將崩潰。例如,您不能將fCV設(shè)置為4.2的MongoDB 4.0版本連接到4.2分片群集。但是,您可以將MongoDB 4.0版本連接?到fCV設(shè)置為4.0的4.2分片群集。mongosmongosmongos
從MongoDB 4.2開始,MongoDB添加了參數(shù)?ShardingTaskExecutorPoolReplicaSetMatching。此參數(shù)確定mongod/mongos實例到分片群集的每個成員的連接池的最小大小?。該值在運行時可能會有所不同。
mongod并mongos維護分片群集中每個副本集的每個副本集的連接池。默認情況下,這些池的連接數(shù)至少是與主數(shù)據(jù)庫的連接數(shù)。
要進行修改,請參見ShardingTaskExecutorPoolReplicaSetMatching。
分片群集安全性
使用內(nèi)部/成員身份驗證可以加強集群內(nèi)部的安全性,并防止未經(jīng)授權(quán)的集群組件訪問集群。您必須mongod使用適當(dāng)?shù)陌踩O(shè)置啟動集群中的每個服務(wù)器,以強制執(zhí)行內(nèi)部身份驗證。
分片鍵
MongoDB使用分片鍵在各個分片之間分發(fā)collection的文檔。分片鍵由文檔中的一個或多個字段組成。
從版本4.4開始,分片集合中的文檔可能缺少分片鍵字段。在跨分片分布文檔時,缺少分片鍵字段將被視為具有空值,但在路由查詢時則不會。有關(guān)更多信息,請參見?Missing Shard Key。
在4.2版及更早版本中,分片集合中的每個文檔中都必須存在分片鍵字段。
在分片集合時選擇分片鍵。
從MongoDB 4.4開始,您可以通過向現(xiàn)有鍵中添加一個或多個后綴字段來優(yōu)化集合的分片鍵。有關(guān)refineCollectionShardKey詳細信息,請參見?。
在MongoDB 4.2和更低版本中,無法在分片后更改分片鍵的選擇。
文檔的分片鍵值決定了其在各個分片中的分布。
從MongoDB 4.2開始,您可以更新文檔的分片鍵值,除非您的分片鍵字段為不可變_id字段。有關(guān)更多信息,請參見?更改文檔的分片鍵值。
在MongoDB 4.0和更早版本中,文檔的分片鍵字段值是不可變的。
分片索引
要對已填充的集合進行分片,該集合必須具有以分片鍵開頭的?索引。分片一個空集合時,如果該集合還沒有針對指定分片鍵的適當(dāng)索引,則MongoDB會創(chuàng)建支持索引。
分片鍵策略
分片鍵的選擇會影響分片群集的性能,效率和可伸縮性。選擇分片鍵可以使具有最佳硬件和基礎(chǔ)結(jié)構(gòu)的群集成為瓶頸。分片鍵及其索引的選擇也會影響群集可以使用的分片策略。
塊(Chunks)
MongoDB的分區(qū)分片數(shù)據(jù)分成塊。每個分塊都有一個基于分片鍵的上下限范圍?。
均衡器(Balancer?)和塊分布
為了在整個集群中的所有分片上實現(xiàn)塊的均勻分布,平衡器在后臺運行,以在各分片上遷移塊。
拆分的優(yōu)勢
讀/寫
MongoDB將讀寫工作負載分布在分片集群中的各個分?片上,從而允許每個分片處理集群操作的子集。通過添加更多分片,可以在集群中水平擴展讀寫工作負載。
對于包含分片關(guān)鍵字或復(fù)合分片關(guān)鍵字的前綴mongos的查詢,可以將查詢定位到特定的分片或一組分片。這些目標(biāo)操作通常比廣播到群集中的每個分片更有效?。
從MongoDB 4.4開始,mongos可以支持hedged reads?以最大程度地減少延遲。
存儲容量
分片橫跨分發(fā)數(shù)據(jù)碎片在集群中,允許每個碎片以包含總簇數(shù)據(jù)的子集。隨著數(shù)據(jù)集的增長,其他分片將增加群集的存儲容量。
高可用性
將配置服務(wù)器和分片作為副本集進行部署可提高可用性。
即使一個或多個分片副本集變得完全不可用,分片群集也可以繼續(xù)執(zhí)行部分讀取和寫入操作。也就是說,雖然無法訪問不可用分片上的數(shù)據(jù),但是針對可用分片的讀取或?qū)懭肴匀豢梢猿晒Α?/p>
分片前的注意事項
分片式群集基礎(chǔ)結(jié)構(gòu)的要求和復(fù)雜性要求仔細計劃,執(zhí)行和維護。
分片后,MongoDB不會提供任何方法來取消分片。
為了確保群集的性能和效率,在選擇分片密鑰時需要仔細考慮。
分片有一定的操作要求和限制。
如果查詢不包含分片鍵或復(fù)合分片鍵的前綴?,請mongos執(zhí)行廣播操作,查詢分?片群集中的所有分片。這些分散/聚集查詢可能是長時間運行的操作。
分片和非分片集合
數(shù)據(jù)庫可以包含分片和未分片集合的混合。分片集合在群集中的分片上分區(qū)和分布?。未分片的集合存儲在?主分片上。每個數(shù)據(jù)庫都有其自己的主碎片。
連接到分片群集
您必須連接到mongos路由器才能與分片群集中的任何集合進行交互。這包括分片和未分片的集合。客戶端永遠不要連接到單個分片以執(zhí)行讀取或?qū)懭氩僮鳌?/p>
分片策略
MongoDB支持兩種分片策略,用于在分片群集之間分布數(shù)據(jù)。
哈希分片
哈希分片涉及計算分片鍵字段值的哈希值。然后,根據(jù)散列的分片鍵值為每個塊分配一個范圍。
建議
使用哈希索引解析查詢時,MongoDB自動計算哈希值。應(yīng)用程序也不會需要計算哈希值。
盡管一系列分片鍵可能是“接近”的,但它們的散列值不太可能在同一塊上?;谏⒘兄档臄?shù)據(jù)分發(fā)有助于更均勻的數(shù)據(jù)分發(fā),尤其是在分片鍵單調(diào)更改的數(shù)據(jù)集中。
但是,散列分布意味著對分片鍵的基于范圍的查詢不太可能針對單個分片,從而導(dǎo)致更多的群集范圍?廣播操作
范圍(range)分片
遠程分片涉及根據(jù)分片鍵值將數(shù)據(jù)劃分為多個范圍。然后,根據(jù)分片鍵值為每個塊分配一個范圍。
值為“ close”的一系列分片鍵更有可能駐留在同一塊上。這允許有針對性的操作,因為mongos可以將操作僅路由到包含所需數(shù)據(jù)的分片。
遠程分片的效率取決于選擇的分片鍵。分片密鑰考慮不周全會導(dǎo)致數(shù)據(jù)分布不均,這可能會削弱分片的某些優(yōu)勢或?qū)е滦阅芷款i。
分片群集中的Zones
Zones?可以幫助改進跨多個數(shù)據(jù)中心的分片集群的數(shù)據(jù)位置。
在分片群集中,您可以基于shard key創(chuàng)建分片數(shù)據(jù)Zones?。您可以將每個Zones?與集群中的一個或多個分片關(guān)聯(lián)。分片可以與任意數(shù)量的區(qū)域關(guān)聯(lián)。在平衡的集群中,MongoDB僅將Zones?覆蓋的塊遷移到與該區(qū)域關(guān)聯(lián)的碎片。
每個Zones?覆蓋一個或多個分片鍵值范圍。區(qū)域覆蓋的每個范圍始終包括其下邊界和上邊界。
在定義要覆蓋的Zones?的新范圍時,必須使用分片鍵中包含的字段。如果使用復(fù)合分片鍵,則范圍必須包含分片鍵的前綴。有關(guān)更多信息,請參見區(qū)域中的分片鍵。
選擇分片鍵時,應(yīng)考慮將來可能使用的區(qū)域。
建議
從MongoDB 4.0.3開始,在?對空集合或不存在的集合進行分片之前設(shè)置區(qū)域和區(qū)域范圍可以更快地設(shè)置區(qū)域分片。
分片中的排序規(guī)則
使用shardCollection命令和排序規(guī)則:{locale:“simple”}選項來切分具有默認排序規(guī)則的集合。成功的分片需要:
集合必須有一個索引,該索引的前綴是分片鍵
索引必須具有排序規(guī)則?{?locale:?"simple"?}
使用排序規(guī)則創(chuàng)建新集合時,請在分片集合之前確保滿足這些條件。
注意:對分片集合的查詢繼續(xù)使用為集合配置的默認排序規(guī)則。要使用shard key索引的簡單排序規(guī)則,請在查詢的排序規(guī)則文檔中指定{locale:“simple”}。
MongoDB 云數(shù)據(jù)庫 GaussDB(for Mongo) 數(shù)據(jù)庫
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。