本文描述了最佳 DB2 設計實(shí)踐,簡(jiǎn)化 DB2 數據生命周期管理。生命周期管理是有效增加(即轉入)新數據,并將主數據庫中不再需要的數據進(jìn)行歸檔(即轉出),DB2 系統提供的功能可以簡(jiǎn)化生命周期管理。 現在的數據庫應用程序通常需要伸縮性、快速轉入及轉出數據——在盡量不影響應用程序訪(fǎng)問(wèn)數據的情況下。轉入轉出數據涉及添加新數據和移除(通常歸檔)歷史數據。今天的很多應用程序是 24X7 訪(fǎng)問(wèn)的,因此消除了以前提供的批處理窗口的數據更新。同樣,很多應用程序需要在并行訪(fǎng)問(wèn)數據的情況下才能連續進(jìn)行數據更新。 DB2數據庫系統提供了多種工具來(lái)實(shí)現伸縮性和在最低限度影響數據訪(fǎng)問(wèn)的情況下,方便連續填充或轉入轉出數據。本文建議的最佳實(shí)踐可用來(lái)設計并實(shí)施這些 DB2 工具,以達到這些目的。
本文描述了最佳 DB2 設計實(shí)踐,簡(jiǎn)化 DB2 數據生命周期管理。生命周期管理是有效增加(即轉入)新數據,并將主數據庫中不再需要的數據進(jìn)行歸檔(即轉出)。 DB2 系統提供了下列功能,這些功能你可以組合使用,可以簡(jiǎn)化生命周期管理:
除了這些 DB2 功能,IBM Optim Data Growth 解決方案還簡(jiǎn)化了數據歸檔生命周期的管理。 DB2數據庫系統分區工具的一個(gè)最重要的好處是,可以部署和更改這些工具而不影響現有應用程序的代碼。 本文是最佳實(shí)踐文章家族的一員,你也能通過(guò)閱讀其它最佳實(shí)踐從中受益。 本文的目標讀者是負責為 DB2 應用程序設計數據庫的人員(如果要達到伸縮性和有效的數據生命周期管理,數據庫人員同樣會(huì )發(fā)現本文的價(jià)值)。本文認為你需要有一定的 DB2 數據庫設計的經(jīng)驗。 這篇文章的內容是基于 DB2 版本 9.5 提供的工具。 DB2 數據庫系統的后續版本可能會(huì )有所提高,這將對本文的最佳實(shí)踐建議帶來(lái)變化。
數據庫分區(之前稱(chēng)為 DPF)是通過(guò)使用哈希鍵值算法把數據分布在數據庫中的各個(gè)邏輯節點(diǎn)上。數據庫分區的目標是通過(guò)在計算機集群之間均勻的分布數據來(lái)最大化可擴展性。數據庫分區通過(guò)減少 DB2 實(shí)用工具操作粒度來(lái)增強擴展性。它并行的在數據庫上進(jìn)行查詢(xún)和更新操作。 下面的例子演示了如何指定數據庫分區:
注意:在 DB2 版本 9 中,PARTITION KEY 子句被重命名為 DISTRIBUTE BY 。 數據庫分區是完全透明的,因此并不影響現有應用程序代碼。同樣,你可以使用 redistribution 實(shí)用工具來(lái)在線(xiàn)更改,而不會(huì )影響應用程序代碼。 在設計你的數據庫分區策略時(shí),使用一個(gè)有較高基數性的分區鍵列,來(lái)確保數據在各個(gè)邏輯節點(diǎn)間均勻分布。一個(gè)有較高基數的列有大量唯一值(而非大部分值相同)。同樣,唯一索引必須是分區鍵的超集。 對那些要進(jìn)行連接的表,嘗試使用相同的分區鍵。這增加了連接并置。 表分區(通常叫做范圍分區)是在一個(gè)邏輯數據庫分區中的一個(gè)或多個(gè)物理對象上,通過(guò)制定鍵值范圍來(lái)分割數據。表分區的目的是組織數據以便于優(yōu)化數據訪(fǎng)問(wèn)和數據轉出。對于特定的應用程序,表分區也有助于轉入數據,然而,多維集群(在下面“ Multi-Dimensional Clustering ”章節討論)往往是增強轉入的更好選擇。數據庫分區是減少實(shí)用工具操作粒度以及超大型數據庫的可擴展性的最佳實(shí)踐。 表分區的好處是:
下面例子演示了指定表分區:
在你的 DB2 文檔中有很多其他技術(shù)可以用來(lái)指定表如何進(jìn)行分區。
多維集群(MDC)是一個(gè) DB2 數據庫系統具有的獨特能力。 MDC 在表中通過(guò)多維鍵值(單元)來(lái)組織數據。 MDC 的目的就是通過(guò)多個(gè)維度方便的存取數據,以保持數據訪(fǎng)問(wèn)只選擇那些相關(guān)的單元。 MDC 通過(guò)維度確保數據隨時(shí)處于集群狀態(tài),從而避免了重組數據的需求(數據永遠不會(huì )變得無(wú)序)。 MDC也利用在每個(gè)維度上的塊索引(并結合維度)對比行 ID(RID)索引。這樣做的結果就是極大的減少了索引大小和索引級別。例如,如果在一個(gè) DB2 單元中能裝入 100 行,塊索引將只指向單元而不是這 100 行數據的每一條。這樣減少了讀取和更新數據的 I/O( 索引值在塊滿(mǎn)了的時(shí)候進(jìn)行更新 ) 。 MDC使轉入和轉出數據變得很方便,而且是對應用程序完全透明的。 下面的例子演示了如何指定多維集群:
在設計你的 MDC 策略時(shí),指定有較低基數的列,以避免稀疏填充單元。稀疏填充的單元會(huì )顯著(zhù)的增加磁盤(pán)空間的使用量。一個(gè)有較低基數的列,會(huì )有很多相同的值(而不是很多唯一值)。你也可以使用一個(gè)生成列來(lái)產(chǎn)生一個(gè)高度集群的維度。例如,一個(gè)生成列或內部函數可以把日期轉換成月份。這樣就顯著(zhù)的減少了基數(對于一年的數據,基數從 365 減少到了 12)。 MDC保證了在所有維度上的集群維護避免了重組數據的需求。這在轉入過(guò)程中極大的減少了 I/O(而使用連續的大塊 I/O)。同樣,由于 MDC 維度上的索引是塊索引,這也使得 MDC 在轉入過(guò)程中避免了過(guò)多的索引 I/O 。塊索引比普通基于 RID 的索引要更小也更淺,這是因為索引條目指向的是一個(gè)數據塊而非一行。 同樣,在轉入過(guò)程中,MDC 減少了索引維護,因為塊索引只在塊滿(mǎn)了的時(shí)候更新一次(不是像其他索引那樣每插入一行就更新一次)。這也有助于減少 I/O 。 INSERT語(yǔ)句在你使用 MDC 時(shí)運行的更快,因為 MDC 從用現有空的數據塊不需要進(jìn)行分頁(yè)。插入鎖定同樣得到了減少,因為鎖發(fā)生在塊級別而不是行級別。 MDC提高了轉出數據的效率,因為刪除的是整個(gè)頁(yè)面而不是每一條記錄。在 MDC 刪除過(guò)程中日志同樣會(huì )減少(每個(gè)頁(yè)面只會(huì )有幾個(gè)字節)。 使用只有一列的 MDC 設計,以便于轉入和轉出數據,而不會(huì )增加磁盤(pán)使用量。 見(jiàn)“連續更新情況下轉入和轉出數據的最佳實(shí)踐”章節中,一個(gè)假設從使用 MDC 轉入數據中獲益的應用程序。 在一個(gè)數據庫設計中同時(shí)使用數據庫分區、表分區和多維集群 開(kāi)發(fā)大型應用程序方法的最佳實(shí)踐是在一個(gè)數據庫設計中同時(shí)實(shí)現數據庫分區、表分區和 MDC 。數據庫分區提供了可擴展性并且確保了在邏輯分區上均勻分布數據;表分區方便了查詢(xún)分區刪除和轉出數據; MDC 提高了查詢(xún)性能并使數據轉入更加方便。 例如:
表分區不能完全解決在 DB2 版本 9.5 中的擴展問(wèn)題。需要繼續使用數據庫分區來(lái)解決大型數據倉庫的擴展問(wèn)題。 DB2 數據庫分區不共享架構是對你的應用程序提供線(xiàn)性擴展而沒(méi)有軟件瓶頸的最好方法。
使用大型表空間(在 DB2 版本 9 中默認使用)能更好的調節大型的表或索引。在 DB2 服務(wù)器上這也使每頁(yè)能存更多的行。 對深度壓縮的表(一頁(yè)中有很多行)和表分區全局索引(預計會(huì )超過(guò) 4K 頁(yè) 64G 容量)使用大型表空間。如果你不受這些問(wèn)題的影響,就不要使用大型表空間。同樣你可以通過(guò)把每個(gè)表分區的全局索引拆分到不同的表空間(強烈建議)來(lái)避免大型表空間的需求。 下面的圖比較了可用空間在不同頁(yè)面大小的情況下能存儲的記錄數目,包括普通表空間和大型表空間。
注意:如果你把一個(gè)表空間改成大型表空間,在與所有表相關(guān)的索引重組完成之前,它不會(huì )立即生效。 當附加了一個(gè)新的分區到表中,或者當你分離了一個(gè)表分區和物化查詢(xún)表(MQT)時(shí),就需要運行 SET INTEGRITY(注意,這些數據在新的分區中 SET INTEGRITY 處理完成之前是不可見(jiàn)的)。 SET INTEGRITY 可能是一個(gè)要運行很長(cháng)時(shí)間的操作,它驗證數據并維護全局索引。這個(gè)維護操作需要記錄日志并可能產(chǎn)生大量的日志輸入。 SET INTEGRITY的關(guān)鍵好處是,操作期間現有數據可以被讀寫(xiě)訪(fǎng)問(wèn)。你可以把對大數據量運行 SET INTEGRITY 的影響通過(guò)使用 MDC 來(lái)減到最小,而且也可以最小化對全局索引和 MQTs 的使用。另外一個(gè)選擇是你可以指定用戶(hù)維護 MQT 來(lái)加速 SET INTEGRITY “設計并實(shí)現你的表分區策略”這一章節有使用 SET INTEGRITY 的建議。 異步索引清除(AIC)是 DB2 的一個(gè)新功能,它在表分區分離后釋放索引空間(清除程序作為較低優(yōu)先級的后臺進(jìn)程運行)。由于有 AIC 功能,分離表分區幾乎是一瞬間的。分離操作不需要等待索引清除完成。 AIC 是一個(gè)后臺進(jìn)程,它是 DB2 數據庫系統自動(dòng)調用的。
從表分區獲益的應用程序使用了下列類(lèi)型的表:
表分區設計,你需要考慮的內容包括:
表分區提供了一個(gè)強大的功能,以限制到分區的數據訪(fǎng)問(wèn)必須滿(mǎn)足 SQL WHERE 子句。為了從分區刪除中獲益,需做好以下工作:
使用下列最佳實(shí)踐來(lái)增強表分區的操作性特征:
有很多因素會(huì )影響你在安裝中如何選擇最佳轉入的解決方案:
下面是兩個(gè)把數據以分區形式轉入的不同技術(shù): 1.ALTER/ATTACH 你使用 ALTER/ATTACH 方法首先離線(xiàn)填充表,然后附加這個(gè)分區。你必須運行 SET INTEGRITY(對于大數據量來(lái)說(shuō),這個(gè)操作可能會(huì )運行很長(cháng)時(shí)間)。 優(yōu)點(diǎn):
缺點(diǎn):
2.ALTER/Add 使用 ALTER/Add 方法,你可以附加一個(gè)空的表分區,然后使用 LOAD 實(shí)用工具或 INSERT 語(yǔ)句來(lái)填充它。 你不需要運行 SET INTEGRITY 優(yōu)點(diǎn):
缺點(diǎn):
建議: 對于更大的數據量,利用 ALTER/Add 方法來(lái)轉入一個(gè)表分區或利用 MDC 來(lái)轉入。
這些最佳實(shí)踐使用 ALTER/Attach 附加一個(gè)表分區,這在前面的章節中已經(jīng)介紹過(guò)了。 在版本 9.1 上,快速附加一個(gè)有壓縮數據的表分區的技術(shù)是:
對版本 9.5,自動(dòng)創(chuàng )建壓縮字典簡(jiǎn)化了這個(gè)快速附加一個(gè)表分區的技術(shù)。
注意,在一個(gè)完全裝載的分區上進(jìn)行離線(xiàn)重組,可以得到比只有這個(gè)月歸檔的分區更好的壓縮。
這個(gè)數據庫設計包含了多個(gè) DB2 數據庫系統功能,以方便在連續更新的請求下的數據轉入和轉出。 這些應用程序的設計有以下特點(diǎn):
關(guān)于數據庫設計的建議: 為了方便轉入數據,指定只有一個(gè)在 day 上的維度的 MDC(見(jiàn)“ MDC 功能有助于轉入和轉出數據”部分) 為了方便轉出數據,對每周或每個(gè)月指定一個(gè)表分區范圍。對 MDC 提供相同的時(shí)間維度不過(guò)是更粗的粒度。 有很長(cháng)運行報告的程序對 DB2 LOAD 實(shí)用工具通常不能排除查詢(xún)。在這種情況下的最佳實(shí)踐是使用 LOAD 實(shí)用工具來(lái)快速裝載數據到中間過(guò)渡表,然后使用一個(gè)有子查詢(xún)的插入來(lái)填充主表。
為了符合公司政策、管理章程、或審計需求,你可能需要保留你的數據并保持它們在很長(cháng)時(shí)間內可用。例如,Health Insurance Portability and Accountability Act (HIPAA) 法案,要求健康護理組織保留至少 5 年的原始醫療記錄。另外,一些企業(yè)也發(fā)現了對歷史數據進(jìn)行分析的價(jià)值,并因此保留更長(cháng)時(shí)期的數據。 因此,為了實(shí)施一個(gè)恰當的轉入轉入策略和適當的數據庫設計,你需要考慮數據的壽命,包括數據保留和獲取政策。出于保留數據的目的,你可以什么都不做并不停的增加硬件能力和資源,來(lái)保持這些附加的數據增長(cháng),然而本文介紹的是數據保留的最佳實(shí)踐。 一個(gè)實(shí)踐就是在數據庫中保留所有數據,把某些范圍轉出作為數據保留,并對這些范圍創(chuàng )建 UNION ALL 視圖以便于訪(fǎng)問(wèn)。 下面的例子演示了如何創(chuàng )建一個(gè) UNION ALL 視圖:
在數據庫使用主存儲把所有數據保持在線(xiàn)時(shí),使用 UNION ALL 視圖定位數據保留和實(shí)時(shí)訪(fǎng)問(wèn)。這個(gè)方法帶來(lái)的一個(gè)問(wèn)題是你可能不需要再維護和備份鏡像相關(guān)的數據。同樣,歷史數據一般不需要高性能,所以不需要進(jìn)行索引或使用在你主數據上的高成本的因素。 有很多使用 UNION ALL 視圖的方法:
對使用 UNION ALL 視圖有一些限制。當你有很多范圍時(shí),最好使用范圍分區表。這是因為某些復雜謂詞不能用在 UNION ALL 視圖上。 然而,在某些情況下 UNION ALL 視圖又很有優(yōu)勢。例如,一個(gè) UNION ALL 視圖可以在聯(lián)邦數據庫中使用,相反,范圍分區表不能。 根據你的歷史數據的服務(wù)級別協(xié)議(SLA),通常同時(shí)討論數據增長(cháng)和保存的最佳實(shí)踐是用 IBM Optim Data Growth 實(shí)施數據歸檔。 IBM Optim Data Growth是在處理增長(cháng)、遵守和管理上領(lǐng)先的解決方案。它通過(guò)歸檔已完成的業(yè)務(wù)對象,來(lái)保持應用程序的完整性,而非單個(gè)表。例如它在歸檔中保持外鍵并保留原數據。這些功能使你能夠:
完成下列步驟指南來(lái)判斷如何最好的實(shí)施你的歸檔策略: 第1步:對你的應用程序進(jìn)行分類(lèi) 首先,你需要根據它們的歸檔需求來(lái)對你的應用程序進(jìn)行分類(lèi)。通過(guò)了解需要從你的應用程序數據中保留什么事務(wù),你可以根據相似數據需求來(lái)對應用程序進(jìn)行分組,來(lái)提高可訪(fǎng)問(wèn)性和性能。一些應用程序只需要保留當前事務(wù);一些只需要訪(fǎng)問(wèn)歷史事務(wù);其他的需要混合訪(fǎng)問(wèn)現在的和歷史的事務(wù)(以不同的比例)。 你也需要客觀(guān)的對歸檔數據考慮服務(wù)層協(xié)議(SLA)。 SLA 是一個(gè)各個(gè)組織間著(zhù)名的協(xié)議,它定義了它們之間的期望,包括客觀(guān)的條目,比如服務(wù)、優(yōu)先級和職責。 SLA 的目的通常被定義為使用響應時(shí)間的目標。例如,可能需要在五分鐘內運行一個(gè)特定的人力資源報告。 第2步:評估你的數據溫度 數據溫度來(lái)自于:
在不同的企業(yè),數據溫度也有所不同,不過(guò)通常來(lái)說(shuō),數據溫度是根據產(chǎn)業(yè)間的區別進(jìn)行的一般分類(lèi)。下表提供了數據溫度的指南:
有很多方法可以訪(fǎng)問(wèn)數據溫度,例如,使用你的轉出策略和系統跟蹤。你需要訪(fǎng)問(wèn)的溫度信息:
你可以使用 DB2 版本 9.5 負載管理器(WLM)來(lái)幫助發(fā)現數據的溫度。 WLM 歷史分析工具提供了關(guān)于那些表、索引和列被訪(fǎng)問(wèn)了,那些沒(méi)有以及有多頻繁的信息。 WLM歷史分析工具有兩個(gè)腳本組成:
要發(fā)現對象中的那些數據被訪(fǎng)問(wèn)過(guò),你需要分析 SQL 語(yǔ)句。要這么做,使用一個(gè) ACTIVITIES 事件監視器來(lái)搜集運行的活動(dòng)數據(包括 SQL 語(yǔ)句文本)。你可能想搜集關(guān)于工作負載管理對象比如工作負載、服務(wù)類(lèi)型和工作類(lèi)型(通過(guò)工作活動(dòng))。要啟用活動(dòng)搜集,在這些市哦那個(gè) COLLECT ACTIVITY DATA WITH DETAILS 子句的對象上執行 CREATE 或 ALTER 語(yǔ)句,如下所示
WITH DETAILS選項啟用對靜態(tài)語(yǔ)句和動(dòng)態(tài) SQL 語(yǔ)句的語(yǔ)句文本搜集。 如果應用程序在語(yǔ)句文本中使用了參數標記,也應該包括 AND VALUES 選項,(指定 COLLECT ACTIVITY DATA WITH DETAILS 和 AND VALUES)。 AND VALUES 選項搜集和參數變量相關(guān)的數據值以獲得詳細語(yǔ)句信息。 第3步:發(fā)現并對你的業(yè)務(wù)對象進(jìn)行分類(lèi) 業(yè)務(wù)對象,比如一個(gè)保單、一個(gè)發(fā)票、或購物清單、代表了一個(gè)事務(wù)交易。通過(guò)指定你的業(yè)務(wù)對象,你可以開(kāi)始定義規則和相關(guān)業(yè)務(wù)驅動(dòng)以在數據生命周期的不同階段管理這些對象。 從數據庫透視圖來(lái)看,一個(gè)業(yè)務(wù)對象表示了一組相關(guān)表中相關(guān)的行 業(yè)務(wù)對象的簡(jiǎn)單例子 給出了下面 3 個(gè)表: ![]() ![]() ![]() 業(yè)務(wù)對象是: ![]() 出于保持和歸檔的目的,你希望表現整個(gè)業(yè)務(wù)對象,比如你有一個(gè)事務(wù)交易的歷史“時(shí)間點(diǎn)”快照。創(chuàng )建一個(gè)歷史快照需要交易細節和相關(guān)主要數據,這包含數據庫中的多個(gè)表??梢酝暾_的對整個(gè)業(yè)務(wù)對象進(jìn)行歸檔,并提供單獨的交易歷史存儲庫。為了響應質(zhì)詢(xún)或發(fā)現需求,你可以查詢(xún)這個(gè)存儲庫而不需要訪(fǎng)問(wèn) HOT 數據。 在這個(gè)例子中,為了確保所有對象可用,歸檔業(yè)務(wù)對象必須由來(lái)自 DEPARTMENT 和 EMPLOYEE 表中的相關(guān)數據組成。在歸檔后,你會(huì )只想刪除生產(chǎn) PROJECT 表中的數據以及和 EMPLOYEE、DEPARTEMENT 無(wú)關(guān)的數據。 就像在這個(gè)例子中展示的,你會(huì )發(fā)現基于模式間的關(guān)系的業(yè)務(wù)對象。 不過(guò),你或許也想包含其它沒(méi)有任何模式關(guān)系的相關(guān)表,卻通過(guò)使用一個(gè)應用程序相關(guān)聯(lián)。另外,你或許會(huì )選擇刪除從某個(gè)業(yè)務(wù)對象上某個(gè)發(fā)現的關(guān)系 第4步:生成你的綜合數據分類(lèi): 在你對你的應用程序和業(yè)務(wù)對象完以成分類(lèi)并對他們相關(guān)數據溫度做出判斷后,你可以生成一個(gè)數據分類(lèi)表來(lái)總結這些信息。這張表可以明白的說(shuō)明數據的年齡。 下表提供了一個(gè)分類(lèi)樣本: ![]() 第5步:判斷后歸檔存儲類(lèi)型 為了判斷什么存儲類(lèi)型歲適合你的老數據:
例如,對于在線(xiàn)歸檔你可以使用 ATA 磁盤(pán)或更大容量的較慢驅動(dòng)。對離線(xiàn)歸檔,你可以使用磁帶或 WORM(IBM DR550,EMC Centera)。 ![]() 第6步:訪(fǎng)問(wèn)歸檔數據 Optim Data Growth訪(fǎng)問(wèn)層使用 SQL92 容量和多種協(xié)議(如上圖所示)以支持對歸檔數據的訪(fǎng)問(wèn)。這個(gè)訪(fǎng)問(wèn)能力和生產(chǎn)系統完全不同,而且不會(huì )使用任何生產(chǎn)系統資源 另外,你可以使用一個(gè)聯(lián)邦系統(使用 IBM DB2 聯(lián)邦服務(wù)器)從生產(chǎn)系統上來(lái)對歸檔數據提供透明訪(fǎng)問(wèn)。 這兩種方法都允許對歸檔數據的直接訪(fǎng)問(wèn),不需要取得或回復歸檔數據。 下面例子演示了如何使用 UNION ALL 視圖來(lái)同時(shí)訪(fǎng)問(wèn)活動(dòng)和歸檔數據。在例子中把數據庫中叫做project表重命名為另外一個(gè)名字,然后創(chuàng )建一個(gè)也叫做project的 UNION ALL 視圖。
另外,下面例子避免了在數據庫中重名表的需求。例子中創(chuàng )建了一個(gè)叫project_all的 UNION ALL 視圖作為替代,應用程序可以從這里查詢(xún)到完整的project數據集:
通過(guò)仔細選擇在你的 DB2 數據庫中最適合分區方法,以及在你的系統上使用最有效的轉入和轉出技術(shù),你可以最大化整體系統性能和效率。 投入足夠的時(shí)間來(lái)分析和理解你的數據,這樣你可以最好的利用本文中的指南,并獲得 DB2 數據庫提供功能的好處來(lái)使你的系統盡可能有效率。 你可以使用數據庫分區來(lái)提供擴展性并確保數據在分區間均勻分布。下面指南在“設計并實(shí)現你的表分區策略”這一章中設計最有效的表分區策略。使用 MDC 來(lái)提高查詢(xún)性能并使轉入數據更容易。 如果你需要從壓縮的額表分區中轉入大量數據,升級到 DB2 版本 9.5 數據庫系統并使用 ALTER/Add 方法來(lái)附加一個(gè)表分區。 如果你需要提供連續更新,你的最佳策略是使用 MDC 以方便轉入處理。 緊接著(zhù)在“在轉出以后:如何管理數據增長(cháng)和數據保持?”指南中確定了如何處理你的歷史數據需求。 在你準備好轉出你的數據并歸檔之前,你需要對數據保留和從歸檔中取回數據確定一個(gè)和你的組織匹配的數據策略。 你可以確定你組織對保留數據的需求,并通過(guò)下列因素取回:
你的策略應該包含什么類(lèi)型的后歸檔存儲是最合適的,以及如何最好的訪(fǎng)問(wèn)歸檔數據。 學(xué)習
獲得產(chǎn)品和技術(shù)
討論 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
聯(lián)系客服