1. 程式人生 > >偽MySQL面試寶典(二)

偽MySQL面試寶典(二)

MyCAT簡單介紹:

所有前端的資料庫連線都會接入到mycat中,mycat識別會話中的讀或者寫的請求,分發到mycat配置的後端資料庫中

mycat後端是一個主備叢集,mycat不負責資料同步,只負責讀寫分析和大表分片的規則和路由

mycat核心配置檔案有三個:
  server.xml配置mycat自我相關的引數
  schema.xml配置mysql資料庫,寫操作的資料來源和讀操作的資料來源
  rule.xml  配置Mycat分片規則

schema.xml簡單分析:
  dataHost定義mycat連線的mysql例項,並且區分定義讀的節點和寫的節點,實現讀寫分離
  dataNode對這些例項進一步關聯,完成分庫
  如dataNode1是例項1的第一個庫,dataNode2是例項2的第一個庫
  table標籤使用dataNode1或者dataNode2或者兩者皆有,也就實現了表訪問的水平切分,完成分庫
  table標籤使用rule規則,實現多個dataNode之間的訪問策略

rule.xml  簡單分析:
  一個table標籤可以使用多個dataNode,那麼這些dataNode之間的負載怎麼切分
  就是rule.xml實現的功能了,它是有分片欄位和分片函式組成的
  分片欄位是選取的表中的用於分片的欄位,如需要根據省份進行分片,那麼分片欄位就是省份
  分片函式則是對分片欄位進行處理的可用函式
  如hash-int,計算分片欄位的hash值,然後根據配置分片值和dataNode對映關係來路由

簡單總結:
mycat使用schema.xml定義邏輯庫和邏輯表,和多個物理mysql庫、表之間進行對映
  使用schema中的dataHost定義writeHost和readHost實現讀寫分離
  使用dataNode關聯dataHost,進一步使用table關聯一個或多個dataNode,實現表的分片
  這種分片方式是表的水平分片,當一個邏輯表存在多個物理分片時,該對映的路由規則由rule來定義
  rule由分片欄位和分片函式組成,分片函式主要有連續分片和離散分片兩類分片函式
  分別相當於oracle的range分割槽表和hash分割槽表,當然也可以連續+離散的組合分片
  這些規則定義在rule.xml中

mycat使用心跳檢測heartbeat來確定連線的多個mysql例項的可用性,心跳檢測主要有
  select user()和show slave status兩種方法

mycat預設埠是8066,web連線mycat像直接連線mysql庫一樣,只需要改埠即可
  原連線串 jdbc:mysql://192.168.1.110:3306/
  使用mycat的連線串 jdbc:mysql://192.168.1.100:8066/
  原連線串 mysql -uxx -pxx -P3306
  使用mycat的連線串 mysql -uxx -pxx -P8066
  連線後能夠使用的庫和表即是schema.xml中配置的邏輯庫和邏輯表
  而在server.xml中定義了mycat的連線邏輯使用者名稱和密碼,以及對應的邏輯庫和邏輯表

表分片有兩種:水平分片和垂直分片,垂直和水平是對於表結構來說的
  垂直分片:將表的列切分開,分片後每一片都具有表全部的記錄數和部分的列,列式資料庫的分表
  水平分片:將表的記錄按一定規則切分開,分片後每一片只有該表的部分記錄,相當於分割槽表
    水平分片有同庫內的分表和多個庫之間的分庫:
      分表:表的分割槽處於同一個庫內,和分割槽表極其相似,小眾的,無法拆分對錶訪問的主機負載
      分庫:表的分割槽處於不同庫內,大眾分片方法,可以拆分對錶訪問的負載

mycat的E-R分片,這裡的E-R是指實體-聯絡,優化具有父子表關係的兩表分片問題
  對父表進行分片,對父表相關聯的子表的對應記錄
  在該記錄插入之時就會自動路由到它的父表記錄所在的dataNode上
  這樣關聯查詢時,就不會產生子表和父表跨分片的情況
  建議子表外來鍵關聯父表分片鍵,這樣路由時無需查庫,這樣就需要父表分片鍵是父表的主鍵了

mycat全域性表,一條insert語句會同步插入到全域性表的各個dataNode上
使各個dataNode上的全域性表資料一致,這個時候如果有跨分片join的情況就可完美解決
比如父表是特別小的表,子表做了分片,那麼父表可以做成全域性表

mycat分片規則:連續分片和離散分片
  連續分片:相當於oracle的range分割槽,是範圍分片,主要是對時間類、數字類分片
  離散分片:相當於oracle的hash分割槽,是hash分片,如列舉分片、取模分片、hash分片
  二次分片:相當於oracle的組合分割槽,先範圍分片,每個範圍分片進行hash分片

Mycat eye可以監控mycat

現在的mycat問題頗多,建議調研proxy sql或者網易開源的cetus
如果要使用mycat,需要公司二次開發支援,解決BUG,進一步定製功能

[TOC]