【數據庫】數據庫切分

前言

     小編最近學習mycat中間件的內容,看了一本書《mycat權威指南》,裏面內容非常豐富,入門篇、高級進階篇、生產實踐篇和開發篇,對小編來說非常有價值。現在簡單總結一下入門篇中的內容。

數據庫切分爲什麼出現

 一、爲什麼出現數據庫切分

   在互聯網時代,海量數據的存儲與訪問成爲系統設計與使用的瓶頸問題,最典型的場景有兩種類型:聯機事務處理(OLTP)和聯機分析處理(OLAP),同時因爲傳統數據庫不可切分,NoSQL數據庫只能是一種補充不能替代傳統數據庫,因此需要藉助第三方處理,實現數據切分。

二、OLTP與OLAP對比

三、數據庫分類

  1.兩類系統有多種技術實現方案,其中存儲部分的數據庫主要分爲兩大類:關係型數據庫與NoSQL數據庫。

  2.關係型數據庫

   是建立在關係模型基礎上的數據庫,使用集合代數等數學概念和方法處理數據庫中的數據。主流的有oracle、DB2、MS SQL Server 和MySQL。

  3.NoSQL數據庫

   全稱Not only SQL,非關係型數據庫。主要分爲臨時性鍵值存儲:memcached、Redis,永久性鍵值存儲:ROMA、Redis,面向文檔的數據庫:MongoDB、CouchDB,面向列的數據庫(Cassandra、HBASE)。

 四、兩類數據庫對比

   單機單庫性能瓶頸,擴展困難,無法滿足日益增長的海量數據存儲及其性能要求,而NoSQL根本性的優勢在於簡單、易於大規模分佈式擴展,讀寫性能非常高。

   

 

什麼是數據切分

一、概念

   指通過某種特定的條件,將同一個數據庫中的數據分散存放到多個數據庫(主機)上面,達到分散單臺設備負載的效果。

二、兩種模式

1. 垂直拆分

   按照不同的表(或者Schema)切分到不同的數據庫(主機)上。一個數據庫由很多表構成,每張表對應不同的業務,垂直切分是按照業務將表進行分類,分佈到不同數據庫上。

 

 2.水平切分

    根據表中數據的邏輯關係,將同一個表中的數據按照某種條件拆分到多臺數據庫(主機)上。

三、兩種模式的對比

1.垂直切分

 優點:

  • 拆分後業務清晰,拆分規則明確
  • 系統間整合或擴展容易
  • 數據維護簡單

  缺點:

  • 部分業務表(很難獨立)無法join   ,只能通過接口方式解決,提高系統複雜度
  • 受每種業務不同的限制存在單庫性能瓶頸,不易數據擴展和性能提高
  • 事務處理複雜

單庫讀寫與存儲瓶頸需要水平拆分來解決。

2.水平切分

  相對垂直拆分,水平拆分不是將表做分類,而是將每張表按照某個字段的某種規則分散到多個庫之中。

  水平拆分數據需要定義分片規則,關係型數據庫是行列的二維模型,拆分的第一原則就是找到拆分維度。

 幾種典型的分片規則包括:

  •  按照用戶ID求模,將數據分散到不同庫,相同數據用戶的數據被分到一個庫中
  • 按照日期劃分
  • 按照某個特定字段求模或根據特定範圍劃分

 優點:

  • 拆分規則抽象好,數據庫可以做join操作
  • 不存在單庫大數據,高併發的性能瓶頸
  • 應用端改造較少
  • 提高了系統的穩定性和負載能力

缺點:

  • 拆分規則難以抽象
  • 分片事務一致性難以解決
  • 數據多次擴展難度和維護量極大
  • 跨庫join性能較差

 3.兩種模式共同的特點缺點

  • 引入分佈式事務問題
  • 跨節點join問題
  • 跨節點合併排序分頁問題
  • 多數據源管理問題

4.數據源管理方案

  A 客戶端模式

   每個應用程序模塊中配置管理自己需要的一個或多個數據源,直接訪問各個數據庫,在模塊內完成數據的整合;

 B 中間代理層

   中間代理層統一管理所有的數據源,後端數據庫集羣對前端應用程序透明。這就是mycat數據庫中間件 對數據切分的解決方案。

數據切分經驗

  1. 能不切分儘量不切分
  2. 一定要選擇合適的切分規則
  3. 儘量通過數據冗餘或表分組(Table Group)來降低跨庫join的可能
  4. 數據庫中間件對數據join實現的優劣難以把握,實現高性能的難度極大,業務讀取儘量少使用多表join

   官網推薦:http://www.mycat.io/,裏面有書籍。

                                                                           感謝您的訪問!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章