1.mysql的程序結構
連接層
1.驗證用戶的合法性(用戶名,密碼,主機域)
2.提供了兩種連接方式(TCP/IP Socket)
3.建立一個與SQL層連接的線程
SQL層
1.接收連接層傳來的SQL語句
2.檢測語法
3.檢測語義(DDL,DML,DQL,DCL),檢測是show還是select?還是update?還是insert?
4.解析器,解析整條SQL語句,生成多種執(zhí)行計劃
5.優(yōu)化器,選擇解析器生成的多種執(zhí)行計劃中,效率最高的一種
6.執(zhí)行器,將優(yōu)化器,優(yōu)化的最優(yōu)的一種執(zhí)行方式,執(zhí)行
- 和存儲引擎層建立連接(提供一個線程)
- 接收存儲引擎層傳來的結構化成表的數(shù)據(jù)
7.寫緩存
8.記錄日志(binlog)
存儲引擎層
1.接收SQL層傳來的SQL語句
2.與磁盤交互,讀取數(shù)據(jù)并結構化成表,返回給SQL層
3.建立一個與SQL層連接的線程
2.innodb和myisam區(qū)別
物理上:
myisam:
-rw-rw---- 1 mysql mysql 10684 Jun 19 15:32 user.frm
-rw-rw---- 1 mysql mysql 464 Jun 21 17:26 user.MYD
-rw-rw---- 1 mysql mysql 2048 Jun 21 17:49 user.MYI
innodb:
-rw-rw---- 1 mysql mysql 8710 Jun 25 16:25 city.frm
-rw-rw---- 1 mysql mysql 671744 Jun 25 16:25 city.ibd
- 事務安全(MyISAM不支持事務灶芝,INNODB支持事務)
- 外鍵 MyISAM 不支持外鍵枷颊, INNODB支持外鍵.
- 鎖機制(MyISAM時表鎖霞掺,innodb是行鎖)
- 查詢和添加速度(MyISAM批量插入速度快
- 支持全文索引(MyISAM支持全文索引箍镜,INNODB不支持全文索引)
6.MyISAM內(nèi)存空間使用率比InnoDB低
7.innodb支持CSR(自動故障恢復),mvcc多版本并發(fā)控制
3.什么是事務憨闰,以及事務的特性遇绞,隔離級別,導致的結果
https://www.cnblogs.com/songanwei/p/9387526.html
4.CSR自動故障修復的過程
5.主從復制的原理
1.異步復制
1)通過change master to語句告訴從庫主庫的ip讼撒,port浑厚,user,password根盒,file钳幅,pos
2)從庫通過start slave命令開啟復制必要的IO線程和SQL線程
3)從庫通過IO線程拿著change master to用戶密碼相關信息,連接主庫炎滞,驗證合法性
4)從庫連接成功后敢艰,會根據(jù)binlog的pos問主庫,有沒有比這個更新的
5)主庫接收到從庫請求后册赛,比較一下binlog信息钠导,如果有就將最新數(shù)據(jù)通過dump線程給從庫IO線程
6)從庫通過IO線程接收到主庫發(fā)來的binlog事件,存儲到TCP/IP緩存中森瘪,并返回ACK更新master.info
7)將TCP/IP緩存中的內(nèi)容存到relay-log中
8)SQL線程讀取relay-log.info牡属,讀取到上次已經(jīng)執(zhí)行過的relay-log位置點,繼續(xù)執(zhí)行后續(xù)的relay-log日志扼睬,執(zhí)行完成后逮栅,更新relay-log.info
2.延時從庫
針對sql線程做手腳,不影響io線程連接dump線程取數(shù)據(jù)
3.半同步復制
半同步復制時窗宇,為了保證主庫上的每一個Binlog事務都能夠被可靠的復制到從庫上措伐,主庫在每次事務成功提交時,并不及時反饋給前端應用用戶担映,而是等待其中的一個從庫也接收到Binlog事務并成功寫入中繼日志后废士,出庫才返回commit操作成功給客戶端。半同步復制保證了事務成功提交后,至少有兩份日志記錄敲霍,一份在主庫的Binlog日志上魁衙,另一份在至少一個從庫的中繼日志Relay log上空猜,從而更近一步保證了數(shù)據(jù)的完整性患雏。
6.MHA的工作原理
1.從宕機崩潰的 Master 保存二進制日志事件(binlog event)郭毕;
- 識別含有最新更新的 Slave浇辜;
- 應用差異的中繼日志(relay log)到其他 Slave朋魔;
- 應用從 Master 保存的二進制日志事件岖研;
- 提升一個 Slave 為新的 Master;
- 使其他的 Slave 連接新的 Master 進行復制警检;
7.什么是gtid的主從復制
https://segmentfault.com/a/1190000014322393
8.什么是水平分表和垂直分表
https://blog.csdn.net/u012240455/article/details/81952906
9.mongodb的應用場景
游戲場景孙援,使用 MongoDB 存儲游戲用戶信息,用戶的裝備扇雕、積分等直接以內(nèi)嵌文檔的形式存儲拓售,方便查詢、更新
物流場景镶奉,使用 MongoDB 存儲訂單信息础淤,訂單狀態(tài)在運送過程中會不斷更新,以 MongoDB 內(nèi)嵌數(shù)組的形式來存儲哨苛,一次查詢就能將訂單所有的變更讀取出來鸽凶。
社交場景,使用 MongoDB 存儲存儲用戶信息建峭,以及用戶發(fā)表的朋友圈信息玻侥,通過地理位置索引實現(xiàn)附近的人、地點等功能
物聯(lián)網(wǎng)場景亿蒸,使用 MongoDB 存儲所有接入的智能設備信息使碾,以及設備匯報的日志信息,并對這些信息進行多維度的分析
視頻直播祝懂,使用 MongoDB 存儲用戶信息票摇、禮物信息等,用戶評論
電商場景,使用 MongoDB
商城上衣和褲子兩種商品砚蓬,除了有共同屬性矢门,如產(chǎn)地、價格灰蛙、材質祟剔、顏色等外,還有各自有不同的屬性集摩梧,如上衣的獨有屬性是肩寬物延、胸圍、袖長等仅父,褲子的獨有屬性是臀圍叛薯、腳口和褲長等
10.redis的應用場景
1.緩存-鍵過期時間
緩存session會話
緩存用戶信息,找不到再去mysql查,查到然后回寫到redis
商城優(yōu)惠卷過期時間
2.排行榜-列表&有序集合
熱度排名排行榜
發(fā)布時間排行榜
3.計數(shù)器應用-天然支持計數(shù)器
帖子瀏覽數(shù)
視頻播放次數(shù)
商品瀏覽數(shù)
點贊/點踩
4.社交網(wǎng)絡-集合
踩/贊,粉絲,共同好友/喜好,推送,打標簽
5.消息隊列系統(tǒng)-發(fā)布訂閱
配合elk實現(xiàn)日志收集
11.什么是消息隊列以及原理和應用
https://www.cnblogs.com/aspirant/p/8778891.html
12.mogondb高可用方案及原理
https://blog.51cto.com/arthur376/2165039?utm_source=oschina-app
13.redis高可用方案及原理
https://www.cnblogs.com/bigben0123/p/9564264.html
https://blog.csdn.net/zzti_erlie/article/details/94339899