mycat——數據庫中間件

myCAT 是一個徹底開源的,面向企業應用開發的“大數據庫集羣” 支持事務、ACID、可以替代Mysql的加強版數據庫 ? 一個可以視爲“Mysql”集羣的企業級數據庫,用來替代昂貴的Oracle集羣 ? 一個融合內存緩存技術、Nosql技術、HDFS大數據的新型SQL Server ? 結合傳統數據庫和新型分佈式數據倉庫的新一代企業級數據庫產品 ? 一個新穎的數據庫中間件產品。

一.什麼是MyCat?

MyCat是目前最流行的基於Java語言編寫數據庫中間件,是一個實現了MySql協議的服務器,其核心功能是分庫分表。配合數據庫的主從模式還可以實現讀寫分離
MyCat官網:http://www.mycat.io/

二、使用MyCat後的架構圖

http://www.mycat.org.cn/img/1.png

三、使用MyCat的優勢

1、數據量級

單一的MySql數據存儲量和操作量級有限,
MyCat可以管理若干MySql數據庫,可以實現數據庫的存儲和操作。

2 、開源性質

Mycat 是 java 編寫的中間件,開源,免費
有非常多的人和組織對 Mycat 實行開發、維護、管理、更新
Mycat 是阿里原應用 corba 轉型而來的

四、MyCat中的概念

1.切分

邏輯上的切分,在物理層面使用多庫(database)、多表(table)實現切分。

1.1 縱向切分/垂直切分

就是把原來存儲在一個庫的數據存儲在多個庫上
由於數據庫的讀寫都是對同一個庫進行操作,所以單庫並不能解決大規模併發寫入的問題。
例如:我們會建立定義數據庫 workDB、商品數據庫 payDB、用戶數據庫 userDB、日誌數據庫 logDB 等。

優點:

  • 減少增量數據寫入時的鎖對查詢的影響。
  • 由於單表數量下降,常見的查詢操作由於減少了需要掃描的記錄,使得單表單次查詢所需檢索的行數變少,減少了磁盤IO、時延變短。

缺點:

  • 無法解決單表數據量太大的問題。

1.2 橫向切分/水平切分

把原本存儲於一個表的數據分塊存儲到多個表上
當一個表中的數據量過大時,我們可以把該表的數據按照某種規則,進行劃分,然後存儲到多個結構相同的表上。
例如:我們 userDB 中的 userTable 中數據量很大,那麼可以把 userDB 切分爲結構相同的多個 userDB:part0DB、part1DB 等,再將 userDB 上的 userTable,切分爲很多 userTable:userTable0、userTable1 等,然後將這些表按照一定的規則存儲到多個 userDB 上。

優點:

  • 單表的併發能力提高了,磁盤的I/O性能也提高了
  • 如果出現高併發的話,總表可以根據不同的查詢,將併發壓力發到不同的小表裏。

缺點:

  • 無法實現表連接查詢

2.邏輯庫-Schema

MyCat中定義的database是邏輯上存在的,但物理上是不存在的。
主要是針對縱向切分提供的概念

3.邏輯表-Table

MyCat中定義的table,是邏輯上存在,物理上不存在的
主要是針對橫向切分提供的概念

4.默認端口

MySql:3306
MyCat:8066
Tomcat:8080
Oracle:1521
nginx:80
http:協議默認端口80
redis:6379

5.數據主機-DataHost

物理MySql存放的主機地址,可以使用主機名,IP,域名定義。

6.數據節點-DataNode

配置物理的database。數據保存的物理節點就是database

7.分片規則

當控制數據的時候,如何訪問物理database和table?
就是訪問dataHost和dataNode的算法
在Mysql處理CRUD時,如何訪問datahost和datanode的算法?如:哈希算法,crc32算法等。

五、MyCat的使用

1.讀寫分離

原理:需要搭建主從模式,讓主數據庫(master)處理增(insert)、刪(delete)、改(update),而從數據庫(slave)處理查(select)操作。
MyCat配合數據庫本身的複製功能,可以解決讀寫分離的問題。

2.主從備份概念

主從備份:就是一種主備模式的數據庫應用
主庫(master)數據與備庫(slave)數據完全一致
實現數據的多重備份,保證數據的安全。
可以在Master[InnoDB]和Slave[MyISAM]中使用不同的數據庫引擎,實現讀寫分離


 

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