APP開發(fā)后臺制作經(jīng)驗之Mysql分庫
當(dāng)數(shù)據(jù)規(guī)模不斷增大,前面所描述的分表和讀寫分離可能都滿足不了系統(tǒng)的性能需求,這時需要考慮分庫,即把不同的數(shù)據(jù)表部署在不同的數(shù)據(jù)庫集群上。在大型的App后臺中,分表都有可能滿足不了需求,某些數(shù)據(jù)表仍然很大,需要進(jìn)行分庫操作,即把張表的數(shù)據(jù)分別存儲在不同的數(shù)據(jù)庫。
目前比較成熟的支持?jǐn)?shù)據(jù)庫分庫的關(guān)系型數(shù)據(jù)庫分布式處理軟件有Cobar。Cobar自誕生之日起,就受到廣大程序員的追捧,但是自2013年后幾乎沒有后續(xù)更新。在此情況下,MyCat這個關(guān)系型數(shù)據(jù)庫分布式處理軟件應(yīng)運(yùn)而生,其以阿里開源的Cobar產(chǎn)品為基礎(chǔ)研發(fā),MvCat的穩(wěn)定性、可靠性、優(yōu)秀的架構(gòu)和性能,以及眾多成熟的使用案例使得MyCat開始就擁有個很好的起點,站在巨人的肩膀上,能看到更遠(yuǎn),深圳APP開發(fā)公司下面以MyCat為例,講解一下其基本的原理。
MvCat以代理服務(wù)器的形式位于應(yīng)用服務(wù)器與后臺數(shù)據(jù)庫之間,由于其是無狀態(tài),因此很容易部署MyCat集群實現(xiàn)負(fù)載均衡。對外開放的接口是MySQL通信腳議,將應(yīng)用服務(wù)器傳過來的SQL語句按照路由的規(guī)則拆解轉(zhuǎn)發(fā)到不同的后臺數(shù)據(jù)庫,并把結(jié)果匯總并返回。MyCat的部署模型如圖6-7所示
APP開發(fā)后臺MySQL數(shù)據(jù)庫分庫示意圖6-7MyCat的部署模型
MvCat可以把個邏輯上的數(shù)據(jù)庫和數(shù)據(jù)表對應(yīng)到物理上真實的數(shù)據(jù)庫和數(shù)據(jù)表,用戶只需要按照邏輯上的結(jié)構(gòu)操作相關(guān)的數(shù)據(jù)就行,遮蔽了物理上的差異性。下面以圖6-8所示的MyCat映射關(guān)系圖來說明。
APP開發(fā)數(shù)據(jù)庫分庫mycat映射關(guān)系圖6-8
MyCat對外提供的數(shù)據(jù)庫是db.其中有兩張表tablel和table2。
·tablel表的數(shù)據(jù)映射到物理數(shù)據(jù)庫dbl的tablel。
·table2表的數(shù)據(jù)部分映射到物理數(shù)據(jù)庫db2的table2,另一部分映射到物理數(shù)據(jù)庫db3的table2。
APP開發(fā)公司下面以個實例來說明MvCat的工作流程,如圖6-9所示。
APP開發(fā)后臺制作分庫操作示意圖6-9mycat工作流程圖
Datanode為MvCat的邏輯數(shù)據(jù)節(jié)點,映射到后端的某個物理數(shù)據(jù)庫的database。為了保證高可用,每個Datauode可配置多個引用地址(DataSource),當(dāng)DataSource被檢測到不可用,MvCat會切換到可用的DataSource,這里的DataSource可認(rèn)為是MySQL主從服務(wù)器的地址。
下面以個例子講解MyCat的工作流程:應(yīng)用服務(wù)器向MvCat服務(wù)器發(fā)送SQL語句“select'fromuserwhereidiu(30,31,32)”。
MvCat服務(wù)器的前端通信模塊與應(yīng)用服務(wù)器通信,前端通信模塊收到這個SQL語句后交給SQL解析模塊,SQL解析模塊解析完畢后根據(jù)查詢條件(idin(30,31,32))交給SQL路由模塊,從路由規(guī)則得知,id取摸余數(shù)為。的數(shù)據(jù)在dbl,id取摸余數(shù)為l的數(shù)據(jù)在db2,id取摸余數(shù)為2的數(shù)據(jù)在db3,于是把SQL拆解為“select*fromuserwhereidin(30)”,“select*fromuserwhereidin(31)”,“select'fromuserwhereidiu(32)”轉(zhuǎn)交給SQL執(zhí)行模塊擾行,分別對應(yīng)數(shù)據(jù)庫dbl、db2、db3。SQL執(zhí)行模塊通過后端通信模塊,分別在dbl、db2、db3上執(zhí)行相應(yīng)的SQL語句。最后把數(shù)據(jù)庫返回的結(jié)果通過數(shù)據(jù)集合并模塊合并,返回給應(yīng)用服務(wù)器。
APP開發(fā)后臺制作之SQL慢查詢分析
SQL慢查詢是指執(zhí)行超過定時間的SQL查詢語句,把這些SQL查詢語句記錄到慢查詢?nèi)罩?,方便開發(fā)人員找出有性能問題的SQL,針對這些SQL查詢語句進(jìn)行分折調(diào)優(yōu)。配置選項中慢查詢相關(guān)的3個參數(shù)如下:
·long_query_time:定義慢查詢的時間,SQL查詢語句執(zhí)行時司大干該參數(shù)沒置時間的SQL都會被記錄下來,支持小于1秒的設(shè)置
·slow_query_log:設(shè)置是否打開慢查詢?nèi)罩镜拈_關(guān)。
·slow_query_log_file:設(shè)置慢查詢?nèi)罩疚募穆窂健?/span>
配置慢查詢有兩種方法。
方法,通過命令行設(shè)置,立即生效,但是在MySQL服務(wù)重啟后失效
setgl.:,ballong_query_time=l;
setgl.:,balsl_w_query_l._,g=on;
setgl-:,balsl_w_query_l._,g_file='/data/sl-_,w.10g';
方法二,在/etc/my.conf中增加下面的配置選項,重啟MySQL服務(wù)后生效。
[MySQLd]
long_query_time=l
slow_query_log=OFT
slow_query_log_file=/data/slow.log
開發(fā)者也可使用MySQL自帶的工具mysqldumpslow分析慢查詢?nèi)罩?,例如.查看最慢的?個SQL查詢的命令格式如下。
mysqidumpsl_w-t3/data/sl_w.locj
開啟慢查詢?nèi)罩竞罂稍谙到y(tǒng)狀態(tài)中可看到共有多少個慢查詢,如圖6-10所示。
APP開發(fā)慢查統(tǒng)狀態(tài)中記錄的慢查詢數(shù)示意圖6-10
開發(fā)人員要分析慢查語句,需要使用到MySQL的explain命令explain顯示了MySQL如果使用索引處理select語句和連接表可以幫助開發(fā)者選擇更好的索引和更優(yōu)化的SQL語句。下面是使用explain分析SQL的例子,如圖6-11所示。
APP開發(fā)慢查系統(tǒng)操作示意圖6-11分析SOL的例子
關(guān)于explain輸出結(jié)果的含義,可以參考MySQL的官方文檔:http://dev.mysql.com/doc/refmau/5.5/en/explain-output.html
#explain_select_type.
APP開發(fā)公司本文關(guān)于APP開發(fā)數(shù)據(jù)庫分庫以及慢查系統(tǒng)布置的流程以及實操步驟就介紹到這里。喜歡本站的朋友敬請持續(xù)關(guān)注本站。博納網(wǎng)絡(luò)編輯整理。