漫談“資料拆分層次對比”

qing_yun發表於2023-02-16

當企業資料達到一個規模後,不得不面臨資料拆分的問題。使用分散式資料庫是一個相對“簡單”的選擇。透過分散式架構可以支撐海量規模,也避免的拆分所帶來的各種“麻煩”。當然,分散式資料庫也不是“銀彈”,會有其適用的場景。如在分散式資料庫下無法解決的話,仍然是需要面臨拆分問題。但如何拆分資料是一個令人頭疼的問題,除了要結合業務拆分外,具體拆分的粒度也是需要關注的。可以在例項級、庫級別、表級別、分割槽級進行拆分,不同層次的拆分各有其利弊。下文針對不同的拆分方式,進行簡單的對比分析。

1. 拆分層次:例項級

在例項級拆分,即透過將原有資料拆分到多個資料庫例項來承載更大規模。

❖ 架構

從架構角度來看,在例項級拆分無疑是比較徹底的,透過增加更多地例項,可以有效增加計算、儲存資源。很多分散式資料庫的架構,也是採用上層分散式計算層與下層單機儲存引擎相結合,原理上就是在架構層拆分更多例項來支撐。每個例項都承載了一部分資料,這種情況會在一定程度上增加資料耦合,需要全部例項可用,才能提供完整的資料服務。

❖ 研發

從研發角度來看,例項級拆分無疑是很大的變化,從單一資料來源變為多個資料來源。針對業務開發來說,不得不去解決多資料來源管理及少量跨例項的問題。一般可透過自研或引入三方的資料庫訪問層來解決問題,減少對開發的影響。針對資料分析類需求,更加建議將資料匯聚到AP層進行處理。無論是哪方面的調整,工作量及工作難度都較之前架構增大及複雜很多。

❖ 運維

從運維角度來看,例項級拆分意味著很多運維工作的變化。從資源管理、例項管理、備份恢復、系統最佳化等,都要從單例項變更為多例項。其劃分為多個例項後,還需解決部分資料耦合關係所帶來的問題。例如,如何實現跨例項的一致性備份、如何解決監控指標的全域性彙總等。針對資料物件本身的管理,則更為複雜。前者多透過運維平臺來解決多例項管理帶來的工作量增多等問題;後者則透過資料庫中間層可有效解決,針對多例項從邏輯上視同單一例項。

❖ 安全

從安全形度來看,例項級拆分無疑是不利的。需要解決多例項下或者說分散條件下的安全統一管理、訪問能力。透過統一的安全平臺或安全框架是可以在一定程度上解決的。

2. 拆分層次:庫級

在庫級拆分,即透過將原有資料拆分到多個資料庫中。不同資料庫叫法不太統一,以MySQL為例就是"show databases"看到的結果。通常也被稱為不同的Schema。

❖ 架構

從架構角度來看,這種拆分方式只是在邏輯層面的一種拆分,並沒有真實增加物理資源,因而對計算、儲存的擴充套件上,達不到什麼效果。從資料耦合上,還有所增加。這種拆分方式雖然沒有增加資源,但是可為未來的擴充套件打下一定基礎。例如,後續拆分給到不同例項,可以簡單將某個Schema拆分出去即可,相對簡化了很多。

❖ 研發

從研發角度來看,較例項級拆分要輕些,需要增加對多Schema的支援。必要的多資料來源管理或部分跨Schema的問題時需要解決的。分析類的需求,可透過跨Schema的關聯完成。在工作量上有一定增加,但難度相對不大。透過也可以自研或引入三方的資料庫訪問層來解決。

❖ 運維

從運維角度來看,應為沒有引入其他例項,從日常運維、備份恢復等沒什麼變化。對於物件管理,是需要考慮多Schema的支援,至於效能上透過拆分Schema是否有提升不確定。使用更小的訪問規模,也許效能有提升;但由於此而引入更多的關聯查詢,可能造成效能下降。

❖ 安全

從安全形度來看,這種方式還是會造成一定管理的複雜度。管理成本的提高跟前面例項相差不大。

3. 拆分層次:表級

表級拆分,是指將原來的單個表,拆成多個分表(表名都發生變化)。物理上從單個物件拆分為多個物件,邏輯上有時可透過諸如檢視等重新裝飾出一個物件。

❖ 架構

從架構角度來看,這種拆分方式是一種邏輯上的拆分,沒有引入更多資源。從資料耦合度看,反而變差了。

❖ 研發

從研發角度來看,與前面庫級拆分類似,都還存在一定的工作量,但相對難度不大。也多可以透過自研或引入三方資料庫訪問層來解決。

❖ 運維

從運維角度來看,與前面庫級拆分也類似,差別不大。

❖ 安全

從安全形度來看,與前面庫級拆分也類似,差別不大。

4. 拆分層次:分割槽級

分割槽是資料庫層面支援的一種技術,透過將資料劃分在表中的多個分割槽,達到資料大而化小的效果。這是一種資料庫原生內建的最佳化能力,較之前的例項級、庫級、物件級,更為輕量,且無更多感知。

❖ 架構

從架構角度來看,這種方式沒有擴充套件現有資源,與拆分前的架構幾乎沒有區別。

❖ 研發

從研發角度來看,幾乎沒有變化。將資料存在分割槽中,從業務層可做到無感。原有的開發邏輯,一般都可以正常使用,只是在個別地方可能需要有所調整。

運維

從運維角度來看,資源、例項層面管理沒有變化。差別較大的就是物件管理,分割槽級拆分提供更為靈活的管理方式,支援如分割槽合併、分裂、交換、清理等能力,可方便物件管理動作。從效能上看,使用分割槽後,資料庫最佳化器將針對分割槽做更多最佳化動作,相對會有不錯的效能提升。當然,這裡需要注意下,不同資料庫在分割槽上面的能力差異較大,有些資料庫是做的相對不完善,分割槽可能存在較多限制。

❖ 安全

從安全形度來看,分割槽級拆分與拆分前沒有太大變化。

來自 “ 韓鋒頻道 ”, 原文作者:韓鋒頻道;原文連結:https://mp.weixin.qq.com/s/I_bJ1WgGPrxA40JF156hig,如有侵權,請聯絡管理員刪除。

相關文章