漫談“資料拆分層次對比”
當企業資料達到一個規模後,不得不面臨資料拆分的問題。使用分散式資料庫是一個相對“簡單”的選擇。透過分散式架構可以支撐海量規模,也避免的拆分所帶來的各種“麻煩”。當然,分散式資料庫也不是“銀彈”,會有其適用的場景。如在分散式資料庫下無法解決的話,仍然是需要面臨拆分問題。但如何拆分資料是一個令人頭疼的問題,除了要結合業務拆分外,具體拆分的粒度也是需要關注的。可以在例項級、庫級別、表級別、分割槽級進行拆分,不同層次的拆分各有其利弊。下文針對不同的拆分方式,進行簡單的對比分析。
1. 拆分層次:例項級
在例項級拆分,即透過將原有資料拆分到多個資料庫例項來承載更大規模。
❖ 架構
從架構角度來看,在例項級拆分無疑是比較徹底的,透過增加更多地例項,可以有效增加計算、儲存資源。很多分散式資料庫的架構,也是採用上層分散式計算層與下層單機儲存引擎相結合,原理上就是在架構層拆分更多例項來支撐。每個例項都承載了一部分資料,這種情況會在一定程度上增加資料耦合,需要全部例項可用,才能提供完整的資料服務。
❖ 研發
從研發角度來看,例項級拆分無疑是很大的變化,從單一資料來源變為多個資料來源。針對業務開發來說,不得不去解決多資料來源管理及少量跨例項的問題。一般可透過自研或引入三方的資料庫訪問層來解決問題,減少對開發的影響。針對資料分析類需求,更加建議將資料匯聚到AP層進行處理。無論是哪方面的調整,工作量及工作難度都較之前架構增大及複雜很多。
❖ 運維
從運維角度來看,例項級拆分意味著很多運維工作的變化。從資源管理、例項管理、備份恢復、系統最佳化等,都要從單例項變更為多例項。其劃分為多個例項後,還需解決部分資料耦合關係所帶來的問題。例如,如何實現跨例項的一致性備份、如何解決監控指標的全域性彙總等。針對資料物件本身的管理,則更為複雜。前者多透過運維平臺來解決多例項管理帶來的工作量增多等問題;後者則透過資料庫中間層可有效解決,針對多例項從邏輯上視同單一例項。
❖ 安全
從安全形度來看,例項級拆分無疑是不利的。需要解決多例項下或者說分散條件下的安全統一管理、訪問能力。透過統一的安全平臺或安全框架是可以在一定程度上解決的。
2. 拆分層次:庫級
在庫級拆分,即透過將原有資料拆分到多個資料庫中。不同資料庫叫法不太統一,以MySQL為例就是"show databases"看到的結果。通常也被稱為不同的Schema。
❖ 架構
從架構角度來看,這種拆分方式只是在邏輯層面的一種拆分,並沒有真實增加物理資源,因而對計算、儲存的擴充套件上,達不到什麼效果。從資料耦合上,還有所增加。這種拆分方式雖然沒有增加資源,但是可為未來的擴充套件打下一定基礎。例如,後續拆分給到不同例項,可以簡單將某個Schema拆分出去即可,相對簡化了很多。
❖ 研發
從研發角度來看,較例項級拆分要輕些,需要增加對多Schema的支援。必要的多資料來源管理或部分跨Schema的問題時需要解決的。分析類的需求,可透過跨Schema的關聯完成。在工作量上有一定增加,但難度相對不大。透過也可以自研或引入三方的資料庫訪問層來解決。
❖ 運維
從運維角度來看,應為沒有引入其他例項,從日常運維、備份恢復等沒什麼變化。對於物件管理,是需要考慮多Schema的支援,至於效能上透過拆分Schema是否有提升不確定。使用更小的訪問規模,也許效能有提升;但由於此而引入更多的關聯查詢,可能造成效能下降。
❖ 安全
從安全形度來看,這種方式還是會造成一定管理的複雜度。管理成本的提高跟前面例項相差不大。
3. 拆分層次:表級
表級拆分,是指將原來的單個表,拆成多個分表(表名都發生變化)。物理上從單個物件拆分為多個物件,邏輯上有時可透過諸如檢視等重新裝飾出一個物件。
❖ 架構
從架構角度來看,這種拆分方式是一種邏輯上的拆分,沒有引入更多資源。從資料耦合度看,反而變差了。
❖ 研發
從研發角度來看,與前面庫級拆分類似,都還存在一定的工作量,但相對難度不大。也多可以透過自研或引入三方資料庫訪問層來解決。
❖ 運維
從運維角度來看,與前面庫級拆分也類似,差別不大。
❖ 安全
從安全形度來看,與前面庫級拆分也類似,差別不大。
4. 拆分層次:分割槽級
分割槽是資料庫層面支援的一種技術,透過將資料劃分在表中的多個分割槽,達到資料大而化小的效果。這是一種資料庫原生內建的最佳化能力,較之前的例項級、庫級、物件級,更為輕量,且無更多感知。
❖ 架構
從架構角度來看,這種方式沒有擴充套件現有資源,與拆分前的架構幾乎沒有區別。
❖ 研發
從研發角度來看,幾乎沒有變化。將資料存在分割槽中,從業務層可做到無感。原有的開發邏輯,一般都可以正常使用,只是在個別地方可能需要有所調整。
運維
從運維角度來看,資源、例項層面管理沒有變化。差別較大的就是物件管理,分割槽級拆分提供更為靈活的管理方式,支援如分割槽合併、分裂、交換、清理等能力,可方便物件管理動作。從效能上看,使用分割槽後,資料庫最佳化器將針對分割槽做更多最佳化動作,相對會有不錯的效能提升。當然,這裡需要注意下,不同資料庫在分割槽上面的能力差異較大,有些資料庫是做的相對不完善,分割槽可能存在較多限制。
❖ 安全
從安全形度來看,分割槽級拆分與拆分前沒有太大變化。
來自 “ 韓鋒頻道 ”, 原文作者:韓鋒頻道;原文連結:https://mp.weixin.qq.com/s/I_bJ1WgGPrxA40JF156hig,如有侵權,請聯絡管理員刪除。
相關文章
- 漫談對大資料的思考大資料
- 談一談資料域層次結構
- GIS資料漫談(三)
- 【森城市】GIS資料漫談(二)
- 漫談Oracle資料庫健康檢查Oracle資料庫
- 資料庫叢集技術漫談資料庫
- 資料探勘-層次聚類聚類
- [思考]對話式設計漫談
- 漫談 React 元件庫開發(一):多層巢狀彈層元件React元件巢狀
- 資料探勘之 層次聚類聚類
- Matlab對資料夾的層次遍歷和深度遍歷Matlab
- MySQL 資料對比MySql
- 漫談“資料湖”之價值與架構架構
- 【Mongodb】 對 shard 進行大量資料拆分測試MongoDB
- 讀資料湖倉05資料需要的層次
- 35面試常問:談談為什麼要拆分資料庫?有哪些方法?面試資料庫
- 資料庫優化-水平拆分 垂直拆分資料庫優化
- Alink漫談(十五) :多層感知機 之 迭代優化優化
- 【資料質量】--認知指標的層次指標
- 漫談大資料的思想形成與價值維度大資料
- 層次結構資料的資料庫儲存和使用資料庫
- 談談網路協議 - 資料鏈路層( Data Link)協議
- Alink漫談(十四) :多層感知機 之 總體架構架構
- 淺談前端MOCK資料工具比較前端Mock
- 漫談幾種反編譯對抗技術編譯
- 談談如何像對待產品一樣對待資料
- 資料庫開發基礎--層次查詢+資料庫
- 資料化運營需要的四個層次
- 資料庫開發基礎---層次查詢資料庫
- 【MySQL】MyRocks 漫談MySql
- UIAppearance漫談UIAPP
- 漫談mysql索引MySql索引
- 基層管理漫談(5):藉助團隊的力量助你成功(轉)
- Oracle cols_as_rows 比對資料Oracle
- Alink漫談(七) : 如何劃分訓練資料集和測試資料集
- 談談對資料架構的幾點認識架構
- PDF 分割拆分 API 資料介面API
- 再談express與koa的對比Express