數(shù)據(jù)倉庫:Redshift:Redshift的分區(qū)與排序策略_第1頁
數(shù)據(jù)倉庫:Redshift:Redshift的分區(qū)與排序策略_第2頁
數(shù)據(jù)倉庫:Redshift:Redshift的分區(qū)與排序策略_第3頁
數(shù)據(jù)倉庫:Redshift:Redshift的分區(qū)與排序策略_第4頁
數(shù)據(jù)倉庫:Redshift:Redshift的分區(qū)與排序策略_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

數(shù)據(jù)倉庫:Redshift:Redshift的分區(qū)與排序策略1數(shù)據(jù)倉庫:Redshift:Redshift的分區(qū)與排序策略1.1Redshift基礎(chǔ)概念1.1.1Redshift架構(gòu)簡介AmazonRedshift是一種完全托管的、高性能的數(shù)據(jù)倉庫服務(wù),用于分析大規(guī)模數(shù)據(jù)集。它基于列式存儲技術(shù),專為處理大規(guī)模數(shù)據(jù)倉庫工作負(fù)載而設(shè)計(jì)。Redshift的架構(gòu)包括一個領(lǐng)導(dǎo)者節(jié)點(diǎn)(LeaderNode)和多個計(jì)算節(jié)點(diǎn)(ComputeNodes),其中領(lǐng)導(dǎo)者節(jié)點(diǎn)負(fù)責(zé)查詢處理和結(jié)果匯總,而計(jì)算節(jié)點(diǎn)則存儲數(shù)據(jù)并執(zhí)行數(shù)據(jù)處理任務(wù)。1.1.1.1架構(gòu)示例-領(lǐng)導(dǎo)者節(jié)點(diǎn)(LeaderNode)

-負(fù)責(zé)接收查詢

-管理查詢執(zhí)行

-匯總結(jié)果

-計(jì)算節(jié)點(diǎn)(ComputeNodes)

-存儲數(shù)據(jù)

-執(zhí)行數(shù)據(jù)處理

-并行處理查詢1.1.2數(shù)據(jù)分布與節(jié)點(diǎn)類型在Redshift中,數(shù)據(jù)分布策略決定了數(shù)據(jù)如何在計(jì)算節(jié)點(diǎn)之間分布,這對于查詢性能至關(guān)重要。Redshift支持以下幾種數(shù)據(jù)分布策略:KeyDistribution(鍵分布):數(shù)據(jù)基于一個或多個列的值分布到不同的節(jié)點(diǎn)上。AllDistribution(全分布):數(shù)據(jù)的完整副本存儲在每個節(jié)點(diǎn)上。EvenDistribution(均勻分布):數(shù)據(jù)均勻地分布到所有節(jié)點(diǎn)上,不考慮特定列的值。1.1.2.1數(shù)據(jù)分布示例假設(shè)我們有一個銷售數(shù)據(jù)表sales,其中包含product_id和sales_date列。我們可以使用鍵分布策略基于product_id分布數(shù)據(jù),以優(yōu)化涉及product_id的查詢性能。CREATETABLEsales(

product_idint,

sales_datedate,

sales_amountnumeric

)

DISTSTYLEKEY

DISTKEY(product_id);1.1.3數(shù)據(jù)類型與存儲格式Redshift支持多種數(shù)據(jù)類型,包括數(shù)值、字符串、日期和時間等。選擇合適的數(shù)據(jù)類型對于優(yōu)化存儲和查詢性能非常重要。此外,Redshift使用列式存儲,這意味著數(shù)據(jù)按列存儲,而不是按行存儲,這在處理大量數(shù)據(jù)時可以顯著提高查詢速度。1.1.3.1數(shù)據(jù)類型示例創(chuàng)建一個包含不同數(shù)據(jù)類型的表:CREATETABLEemployees(

idint,

namevarchar(100),

hire_datedate,

salarynumeric(10,2)

);1.1.3.2存儲格式示例Redshift的列式存儲格式可以通過ENCODE參數(shù)進(jìn)行優(yōu)化,以減少存儲空間和提高查詢性能。例如,對于salary列,我們可以使用az64編碼,這是一種適用于數(shù)值數(shù)據(jù)的高效編碼方式。CREATETABLEemployees(

idintENCODEaz64,

namevarchar(100)ENCODElzo,

hire_datedateENCODEaz64,

salarynumeric(10,2)ENCODEaz64

);1.2Redshift的分區(qū)與排序策略1.2.1分區(qū)策略分區(qū)是將大表分割成更小、更易于管理的部分的過程。在Redshift中,可以使用INTERLEAVED或BY關(guān)鍵字來創(chuàng)建分區(qū)表。分區(qū)可以基于日期、范圍或列表進(jìn)行,以優(yōu)化查詢性能和數(shù)據(jù)管理。1.2.1.1分區(qū)示例創(chuàng)建一個基于sales_date列的范圍分區(qū)表:CREATETABLEsales(

product_idint,

sales_datedate,

sales_amountnumeric

)

DISTSTYLEKEY

DISTKEY(product_id)

SORTKEY(sales_date)

PARTITIONBYRANGE(sales_date)

(

PARTITIONsales_q1VALUESLESSTHAN('2023-04-01'),

PARTITIONsales_q2VALUESLESSTHAN('2023-07-01'),

PARTITIONsales_q3VALUESLESSTHAN('2023-10-01'),

PARTITIONsales_q4VALUESLESSTHAN(MAXVALUE)

);1.2.2排序策略排序策略(SORTKEY)決定了數(shù)據(jù)在節(jié)點(diǎn)內(nèi)的存儲順序。正確使用SORTKEY可以減少數(shù)據(jù)掃描量,從而提高查詢性能。SORTKEY可以是單列或多列,但通常選擇經(jīng)常用于查詢條件或連接操作的列。1.2.2.1排序示例在sales表中,我們選擇sales_date作為SORTKEY,因?yàn)樵S多查詢可能涉及按日期范圍篩選數(shù)據(jù)。CREATETABLEsales(

product_idint,

sales_datedate,

sales_amountnumeric

)

DISTSTYLEKEY

DISTKEY(product_id)

SORTKEY(sales_date);1.2.3分區(qū)與排序的結(jié)合使用結(jié)合使用分區(qū)和排序策略可以進(jìn)一步優(yōu)化查詢性能。例如,我們可以基于sales_date列進(jìn)行分區(qū),并在每個分區(qū)內(nèi)部使用SORTKEY對product_id進(jìn)行排序,以優(yōu)化涉及日期和產(chǎn)品ID的查詢。1.2.3.1結(jié)合使用示例CREATETABLEsales(

product_idint,

sales_datedate,

sales_amountnumeric

)

DISTSTYLEKEY

DISTKEY(product_id)

SORTKEY(sales_date,product_id)

PARTITIONBYRANGE(sales_date)

(

PARTITIONsales_q1VALUESLESSTHAN('2023-04-01'),

PARTITIONsales_q2VALUESLESSTHAN('2023-07-01'),

PARTITIONsales_q3VALUESLESSTHAN('2023-10-01'),

PARTITIONsales_q4VALUESLESSTHAN(MAXVALUE)

);通過上述示例,我們可以看到如何在Redshift中創(chuàng)建一個既分區(qū)又排序的表,以優(yōu)化涉及日期和產(chǎn)品ID的查詢性能。正確選擇數(shù)據(jù)分布、數(shù)據(jù)類型、存儲格式、分區(qū)和排序策略,是構(gòu)建高效Redshift數(shù)據(jù)倉庫的關(guān)鍵。2數(shù)據(jù)倉庫:Redshift:分區(qū)策略詳解2.1理解分區(qū)的重要性在數(shù)據(jù)倉庫中,分區(qū)是一種優(yōu)化查詢性能和管理數(shù)據(jù)的有效策略。通過將數(shù)據(jù)邏輯上或物理上分割成更小、更易于管理的部分,分區(qū)可以顯著減少查詢所需掃描的數(shù)據(jù)量,從而加快查詢速度。在AmazonRedshift中,分區(qū)尤其重要,因?yàn)樗軌驇椭覀兏玫乩闷淞惺酱鎯痛笠?guī)模并行處理(MPP)架構(gòu)。2.1.1分區(qū)的好處提高查詢性能:查詢只掃描與查詢條件相關(guān)的分區(qū),而不是整個表。簡化數(shù)據(jù)管理:可以獨(dú)立地管理每個分區(qū),如刪除、歸檔或壓縮舊數(shù)據(jù)。優(yōu)化存儲:通過將數(shù)據(jù)分布到不同的節(jié)點(diǎn)上,可以更有效地利用存儲空間。2.2Redshift中的分區(qū)類型Redshift支持兩種主要的分區(qū)類型:范圍分區(qū)(RangePartitioning)和列表分區(qū)(ListPartitioning)。2.2.1范圍分區(qū)范圍分區(qū)是基于一個或多個列的值的范圍來分割數(shù)據(jù)。例如,可以基于日期或時間戳列來創(chuàng)建范圍分區(qū),將數(shù)據(jù)分割成不同的月份或年份。2.2.2列表分區(qū)列表分區(qū)是基于列的特定值列表來分割數(shù)據(jù)。這種分區(qū)方式適用于數(shù)據(jù)值離散且可預(yù)測的情況,如基于地區(qū)或產(chǎn)品ID進(jìn)行分區(qū)。2.3如何選擇合適的分區(qū)鍵選擇分區(qū)鍵是設(shè)計(jì)分區(qū)策略的關(guān)鍵步驟。一個好的分區(qū)鍵應(yīng)該:具有高選擇性:即鍵值分布廣泛,避免數(shù)據(jù)傾斜。與查詢條件相關(guān):分區(qū)鍵應(yīng)與經(jīng)常用于過濾的列相匹配,以減少查詢掃描的數(shù)據(jù)量。易于管理和理解:分區(qū)鍵的選擇應(yīng)簡化數(shù)據(jù)管理流程,同時對業(yè)務(wù)邏輯清晰。2.3.1示例:基于時間的分區(qū)假設(shè)我們有一個銷售數(shù)據(jù)表,其中包含大量的歷史銷售記錄。為了優(yōu)化查詢性能,我們可以基于sale_date列創(chuàng)建范圍分區(qū),將數(shù)據(jù)按年份分割。CREATETABLEsales(

sale_idINT,

product_idINT,

sale_dateDATE,

sale_amountDECIMAL(10,2)

)

PARTITIONBYRANGE(sale_date);

--創(chuàng)建2020年的分區(qū)

CREATETABLEsales_2020PARTITIONOFsales

FORVALUESFROM('2020-01-01')TO('2021-01-01');

--創(chuàng)建2021年的分區(qū)

CREATETABLEsales_2021PARTITIONOFsales

FORVALUESFROM('2021-01-01')TO('2022-01-01');2.3.2數(shù)據(jù)樣例假設(shè)我們有以下銷售數(shù)據(jù):sale_idproduct_idsale_datesale_amount11012020-01-01100.0021022020-02-15200.0031032021-03-20150.0041042021-04-25300.002.3.3查詢示例如果我們想要查詢2021年的銷售數(shù)據(jù),可以使用以下SQL語句:SELECT*FROMsales

WHEREsale_date>='2021-01-01'ANDsale_date<'2022-01-01';由于我們已經(jīng)基于sale_date列創(chuàng)建了分區(qū),Redshift將只掃描sales_2021分區(qū),而不是整個sales表,從而顯著提高了查詢性能。2.4總結(jié)在Redshift中,合理地使用分區(qū)策略可以極大地提升數(shù)據(jù)倉庫的性能和效率。通過理解分區(qū)的重要性,選擇合適的分區(qū)類型和鍵,我們可以構(gòu)建出更加優(yōu)化的數(shù)據(jù)存儲結(jié)構(gòu),以支持快速、高效的數(shù)據(jù)分析和業(yè)務(wù)決策。在實(shí)際應(yīng)用中,應(yīng)根據(jù)數(shù)據(jù)特性和查詢模式來定制分區(qū)策略,以達(dá)到最佳的性能優(yōu)化效果。3排序策略深入3.1排序與數(shù)據(jù)加載在AmazonRedshift中,數(shù)據(jù)的排序方式直接影響查詢性能。當(dāng)數(shù)據(jù)加載到表中時,Redshift會根據(jù)定義的SORTKEY對數(shù)據(jù)進(jìn)行物理排序。這種排序策略有助于加速數(shù)據(jù)的檢索,特別是在執(zhí)行范圍查詢或連接操作時。3.1.1理解SORTKEY的作用SORTKEY是一個或多個列的組合,用于確定數(shù)據(jù)在磁盤上的物理排序方式。Redshift使用SORTKEY來優(yōu)化查詢,通過減少需要掃描的數(shù)據(jù)量,從而提高查詢速度。當(dāng)查詢涉及SORTKEY列時,Redshift可以更快地定位到所需的數(shù)據(jù)塊,減少I/O操作。3.1.2如何選擇排序鍵選擇SORTKEY時,應(yīng)考慮以下幾點(diǎn):-查詢模式:選擇最常用于過濾或連接的列作為SORTKEY。-數(shù)據(jù)分布:選擇數(shù)據(jù)分布均勻的列,避免數(shù)據(jù)傾斜。-列的唯一性:高唯一性的列作為SORTKEY可以減少數(shù)據(jù)的重復(fù)存儲,提高存儲效率。3.2示例:基于業(yè)務(wù)邏輯的排序假設(shè)我們有一個銷售數(shù)據(jù)表sales,包含以下列:-sale_id:銷售記錄的唯一標(biāo)識。-product_id:產(chǎn)品標(biāo)識。-sale_date:銷售日期。-quantity:銷售數(shù)量。-price:銷售價格。3.2.1數(shù)據(jù)表定義CREATETABLEsales(

sale_idINTNOTNULL,

product_idINTNOTNULL,

sale_dateDATENOTNULL,

quantityINTNOTNULL,

priceDECIMAL(10,2)NOTNULL,

PRIMARYKEY(sale_id),

SORTKEY(product_id,sale_date)

);在這個例子中,我們選擇了product_id和sale_date作為SORTKEY。這是因?yàn)椋?product_id:產(chǎn)品是銷售數(shù)據(jù)的關(guān)鍵組成部分,查詢可能經(jīng)常需要按產(chǎn)品進(jìn)行過濾或聚合。-sale_date:銷售數(shù)據(jù)的時間序列性質(zhì)意味著按日期排序可以加速時間范圍查詢。3.2.2數(shù)據(jù)加載COPYsalesFROM's3://mybucket/sales_data.csv'

CREDENTIALS'aws_access_key_id=ACCESS_KEY;aws_secret_access_key=SECRET_KEY'

CSVIGNOREHEADER1;3.2.3查詢優(yōu)化使用SORTKEY的查詢示例:SELECTproduct_id,SUM(quantity)astotal_quantity,SUM(price)astotal_sales

FROMsales

WHEREsale_dateBETWEEN'2023-01-01'AND'2023-03-31'

GROUPBYproduct_id;由于SORTKEY包括product_id和sale_date,上述查詢可以利用SORTKEY快速定位到指定日期范圍內(nèi)的產(chǎn)品銷售記錄,從而減少數(shù)據(jù)掃描量,提高查詢效率。3.2.4注意事項(xiàng)更新頻率:如果SORTKEY列的數(shù)據(jù)更新頻繁,可能需要定期進(jìn)行VACUUM操作以維護(hù)數(shù)據(jù)的排序狀態(tài)。查詢模式:SORTKEY應(yīng)根據(jù)實(shí)際查詢模式進(jìn)行選擇,以最大化查詢性能。數(shù)據(jù)傾斜:避免選擇數(shù)據(jù)分布不均的列作為SORTKEY,以防止數(shù)據(jù)傾斜,影響查詢性能。通過以上示例,我們可以看到在AmazonRedshift中合理選擇和使用SORTKEY對于優(yōu)化查詢性能至關(guān)重要。理解數(shù)據(jù)的業(yè)務(wù)邏輯和查詢模式是選擇有效SORTKEY的關(guān)鍵。4數(shù)據(jù)倉庫:Redshift:復(fù)合策略應(yīng)用4.1分區(qū)與排序的結(jié)合使用在AmazonRedshift中,數(shù)據(jù)的組織方式對查詢性能有顯著影響。分區(qū)和排序是兩種關(guān)鍵的數(shù)據(jù)組織策略,它們可以單獨(dú)使用,也可以結(jié)合使用以優(yōu)化查詢性能。4.1.1分區(qū)分區(qū)允許將大表分割成更小、更易于管理的部分。Redshift支持兩種類型的分區(qū):范圍分區(qū)和列表分區(qū)。范圍分區(qū)基于連續(xù)的值區(qū)間,如日期或時間戳;列表分區(qū)則基于特定的值列表,如地區(qū)代碼或產(chǎn)品類別。4.1.2排序排序策略定義了數(shù)據(jù)在磁盤上的物理存儲方式,可以是排序鍵或分布鍵。排序鍵用于確定數(shù)據(jù)行在磁盤上的順序,而分布鍵則用于決定數(shù)據(jù)行存儲在哪個節(jié)點(diǎn)上。4.2優(yōu)化查詢性能的策略結(jié)合使用分區(qū)和排序可以顯著提高查詢性能。以下是一些關(guān)鍵策略:使用分區(qū)減少掃描范圍:通過將數(shù)據(jù)分區(qū),可以減少查詢時需要掃描的數(shù)據(jù)量,從而加快查詢速度。利用排序鍵加速查詢:如果查詢經(jīng)常使用某個字段進(jìn)行排序或過濾,將該字段設(shè)置為排序鍵可以加速查詢。合理選擇分布鍵:分布鍵的選擇應(yīng)基于查詢模式,以減少數(shù)據(jù)的跨節(jié)點(diǎn)傳輸,提高查詢效率。4.3示例:復(fù)合分區(qū)與排序假設(shè)我們有一個銷售數(shù)據(jù)表sales,包含以下字段:sale_date(銷售日期)、region(地區(qū))、product_id(產(chǎn)品ID)和amount(銷售金額)。我們經(jīng)常需要查詢特定地區(qū)在特定日期范圍內(nèi)的銷售總額。CREATETABLEsales(

sale_dateDATE,

regionVARCHAR(50),

product_idINTEGER,

amountDECIMAL(10,2)

)

DISTSTYLEKEY

DISTKEY(region)

SORTKEY(sale_date,region);4.3.1解釋分區(qū):雖然SQL語句中沒有直接體現(xiàn)分區(qū),但通過DISTKEY和SORTKEY的組合使用,可以達(dá)到類似的效果。在這個例子中,數(shù)據(jù)首先按region分布,然后在每個節(jié)點(diǎn)上按sale_date排序。分布鍵:選擇region作為分布鍵,因?yàn)椴樵兘?jīng)?;诘貐^(qū)進(jìn)行。排序鍵:sale_date被選為排序鍵,因?yàn)椴樵兘?jīng)常涉及日期范圍。4.3.2查詢示例--查詢2023年1月1日至2023年1月31日,華東地區(qū)的銷售總額

SELECTSUM(amount)

FROMsales

WHEREsale_dateBETWEEN'2023-01-01'AND'2023-01-31'

ANDregion='華東';由于數(shù)據(jù)已經(jīng)按region分布,并且在每個節(jié)點(diǎn)上按sale_date排序,因此這個查詢可以快速定位到華東地區(qū)的數(shù)據(jù),并僅掃描2023年1月的數(shù)據(jù),從而大大提高了查詢效率。4.4評估與調(diào)整策略評估和調(diào)整分區(qū)與排序策略是一個持續(xù)的過程,需要根據(jù)查詢模式和數(shù)據(jù)增長進(jìn)行定期審查。4.4.1評估查詢性能分析:使用Redshift的EXPLAIN命令分析查詢計(jì)劃,檢查是否有效地利用了分區(qū)和排序。數(shù)據(jù)分布檢查:定期檢查數(shù)據(jù)分布,確保分布鍵仍然有效,數(shù)據(jù)在節(jié)點(diǎn)間均勻分布。4.4.2調(diào)整重新定義分布鍵:如果查詢模式發(fā)生變化,可能需要重新選擇分布鍵。調(diào)整排序鍵:如果發(fā)現(xiàn)某些查詢經(jīng)常使用不同的字段進(jìn)行排序,可以考慮調(diào)整排序鍵以優(yōu)化這些查詢。數(shù)據(jù)再分布:使用ALTERTABLE命令重新分布數(shù)據(jù),以適應(yīng)新的分布鍵或排序鍵設(shè)置。通過持續(xù)的評估和調(diào)整,可以確保Redshift的數(shù)據(jù)組織策略始終與查詢需求保持一致,從而最大化查詢性能。5最佳實(shí)踐與案例分析5.1Redshift性能調(diào)優(yōu)技巧5.1.1分區(qū)策略在AmazonRedshift中,分區(qū)是一種優(yōu)化查詢性能的關(guān)鍵技術(shù)。通過將數(shù)據(jù)按邏輯或物理方式分割,可以減少掃描的數(shù)據(jù)量,從而加速查詢。Redshift支持兩種主要的分區(qū)類型:范圍分區(qū)和列表分區(qū)。5.1.1.1范圍分區(qū)范圍分區(qū)通?;谌掌诨驎r間戳字段,將數(shù)據(jù)分割成多個部分。例如,假設(shè)我們有一個銷售數(shù)據(jù)表,其中包含sale_date字段,我們可以按年或月進(jìn)行范圍分區(qū)。CREATETABLEsales(

sale_idINT,

sale_dateDATE,

product_idINT,

quantityINT,

priceDECIMAL(10,2),

PRIMARYKEY(sale_id)

)

PARTITIONBYRANGE(sale_date)

(

PARTITIONsales_2020VALUESLESSTHAN('2021-01-01'),

PARTITIONsales_2021VALUESLESSTHAN('2022-01-01'),

PARTITIONsales_2022VALUESLESSTHAN('2023-01-01')

);5.1.1.2列表分區(qū)列表分區(qū)允許根據(jù)特定值列表來分割數(shù)據(jù)。例如,如果我們想要根據(jù)產(chǎn)品類別來分區(qū)銷售數(shù)據(jù),可以使用列表分區(qū)。CREATETABLEsales(

sale_idINT,

sale_dateDATE,

product_idINT,

quantityINT,

priceDECIMAL(10,2),

categoryVARCHAR(50),

PRIMARYKEY(sale_id)

)

PARTITIONBYLIST(category)

(

PARTITIONsales_electronicsVALUES('Electronics'),

PARTITIONsales_booksVALUES('Books'),

PARTITIONsales_clothingVALUES('Clothing')

);5.1.2排序策略排序是Redshift中另一個重要的性能優(yōu)化技術(shù)。它可以幫助數(shù)據(jù)在磁盤上以有序的方式存儲,從而加速查詢。Redshift支持兩種排序類型:SORTKEY和DISTKEY。5.1.2.1SORTKEYSORTKEY用于在數(shù)據(jù)加載時對數(shù)據(jù)進(jìn)行排序,可以顯著提高涉及排序字段的查詢性能。例如,如果我們經(jīng)常按sale_date查詢銷售數(shù)據(jù),可以將sale_date設(shè)置為SORTKEY。CREATETABLEsales(

sale_idINT,

sale_dateDATE,

product_idINT,

quantityINT,

priceDECIMAL(10,2),

PRIMARYKEY(sale_id)

)

SORTKEY(sale_date);5.1.2.2DISTKEYDISTKEY用于數(shù)據(jù)分布,可以加速涉及DISTKEY字段的JOIN操作。例如,如果

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論