1. 什么是mycat蝗羊?
2. mycat可以應(yīng)用在什么場景?
3. 什么樣的表需要進(jìn)行分片兄朋?
答:超過1000萬的表需要進(jìn)行分片常拓。
4. mycat的工作原理是什么渐溶?
- sql解析
- 分片分析
- 路由分析
- 讀寫分離分析
- 緩存分析
- sql執(zhí)行
- 結(jié)果合并處理
5. mycat的架構(gòu)是什么?
6. mycat的核心概念有什么弄抬?
7. mycat的配置選項有什么茎辐?
可以通過配置子表,來避免跨庫查詢,會將子表存儲在對應(yīng)的父表ID的庫中拖陆。
8. mycat如何做讀寫分離弛槐?
答:mycat不負(fù)責(zé)任何的數(shù)據(jù)同步,所以需要配置mysql的主從數(shù)據(jù)同步慕蔚。
如果配置了多個writeHost丐黄,則第一個才會寫。
- 第二種配置方式孔飒,如果第一個writeHost掛了灌闺,則會找第二個。
-
第一種配置方式坏瞄,如果只有一個writeHost桂对,且掛了,則所有的readHost都不能用鸠匀。
9. mycat如何分片蕉斜?
10. 字典表/全局表的意義是什么?
答:例如國家列表缀棍,存量姓恕(100w以下的數(shù)據(jù)表),需要經(jīng)常和其他表進(jìn)行join爬范,所以可以用空間換取時間父腕,防止跨庫訪問,則所有分片上面都放入全局表青瀑。
11. 分庫分表的原則是什么璧亮?
答:分不分庫,分哪些庫斥难,分不分表枝嘶,什么規(guī)則分,分多少分片哑诊。
- 能不分盡量不分群扶,1000萬以下的表不用分片,可以通過索引的方式解決問題镀裤。如果達(dá)到了1000萬穷当,大表需要拆分,與其相關(guān)的關(guān)聯(lián)中表(即沒有達(dá)到1000萬但是大于100萬的表)也需要進(jìn)行拆分淹禾,盡量使用和大表一樣的分片規(guī)則,如果不行茴扁,則需要在java中分步驟查詢铃岔,先查詢大表,根據(jù)id再查詢小表,或者可以破例使用全局表(如果破例使用全局表毁习,要看這個表是否會多線程更新同一條數(shù)據(jù)智嚷,會造成死鎖,如果沒有這個問題纺且,可以破例使用全局表)盏道。小于100萬的使用全局表。
- 分片盡量少载碌,均勻分布在多個節(jié)點上
- 盡量不要在一個事務(wù)中跨分片處理
- 分片規(guī)則需要謹(jǐn)慎選擇猜嘱,涉及到數(shù)據(jù)的增長模式,數(shù)據(jù)的訪問模式嫁艇,分片關(guān)聯(lián)性朗伶,分片擴(kuò)容的問題,最常見的分片規(guī)則為范圍分片(例如日期或者數(shù)字)步咪,枚舉分片(例如省份)论皆,一致性hash分片(就是個環(huán)),還有范圍取模(先按范圍分片猾漫,再按照取模來均勻存儲)点晴,ASCII碼之和再取模(針對String類型的),這幾種方式都有利于擴(kuò)容悯周。如果某個表帶有明顯的時間特點粒督,例如訂單和交易記錄,則可以以時間作為劃分队橙,我們往往關(guān)注近期的數(shù)據(jù)坠陈。一般來說分片取決于查詢語句中用的最多的where語句。拆分字段是不可修改的捐康,拆分字段只能是一個字段仇矾,如果想按照兩個字段拆分,則需要建一個新冗余字段解总,進(jìn)行拼接贮匕。拆分之后的表不要超過1000萬。
- 查詢條件要優(yōu)化花枫,盡量避免select *刻盐,因為有帶寬和CPU損耗。查詢結(jié)果盡量避免大結(jié)果集劳翰。盡量利用索引進(jìn)行性能優(yōu)化敦锌。
12. sql語句如何統(tǒng)計,找到最優(yōu)的分片佳簸?
找出最頻繁的sql語句乙墙,然后分析之間的關(guān)系和ER,以及條件
- 采用特殊的JDBC,攔截所有的sql听想,進(jìn)行統(tǒng)計
- 采用mycat的sql攔截機制腥刹,寫插件攔截
- 分析mysql的日志
13. 庫內(nèi)分表是否是好的習(xí)慣?
答:不是汉买。盡管解決了單表過大的問題衔峰,但是IO/CPU的競爭還是一樣的。mycat建議mycat分庫+mysql分區(qū)蛙粘。
14. DataNode的分布應(yīng)該如何選擇垫卤?
- 可以全部放在一個節(jié)點,但是壓力大
- 可以連續(xù)分布组题,前5個放第一個節(jié)點葫男,后5個放第二個節(jié)點
- 可以均勻分布,使得多個節(jié)點的數(shù)據(jù)接近一致崔列,推薦這種方式梢褐。
15. mycat主鍵如何生成唯一?
答:全局序列赵讯。具體五種生成方式參看文檔盈咳。其中通過數(shù)據(jù)庫的方式,則mycat每次取出100個連續(xù)id边翼,等用完了再去取鱼响。其中ZK的自增ID比較合適,ID也不大组底,效率高丈积。
16. mycat最佳實踐有哪些?
-
可以去github上面查詢官方文檔债鸡。
-
后端可以根據(jù)業(yè)務(wù)不一樣江滨,來進(jìn)行不同集群的部署
-
加入zookeeper,則可以將配置放在一起厌均,還可以有負(fù)載均衡唬滑。
17. mycat的dataHost負(fù)載均衡有哪些選項?
18. mycat由哪幾個部分組成棺弊?
答:mycat-server + mycat-web + mycat-mini-monitor晶密。