偽MySQL面試寶典(二)
阿新 • • 發佈:2018-11-19
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]