mysql数据库的体系结构包括什么组件_MySQL数据库的体系结构
MySQL體系結(jié)構(gòu)遵循C/S模型,即客戶機(jī)/服務(wù)器模型,MySQL客戶機(jī)通過原生的多種接口,可以與MySQL服務(wù)器進(jìn)行交互。MySQL數(shù)據(jù)庫(kù)是單進(jìn)程多線程的架構(gòu),同windows平臺(tái)下的Oracle數(shù)據(jù)庫(kù)與全平臺(tái)下的達(dá)夢(mèng)數(shù)據(jù)庫(kù)一樣,采取單進(jìn)程多線程,可以減少資源的開銷,因?yàn)榫€程上下文切換與進(jìn)程間上下文切換相比,不需要保存共享內(nèi)存、全局變量等資源,提升了系統(tǒng)性能。但多進(jìn)程對(duì)于高并發(fā)的提升效果較好,linux平臺(tái)下的Oracle數(shù)據(jù)庫(kù)就是采取的多進(jìn)程的架構(gòu)。
不論是MySQL數(shù)據(jù)庫(kù),還是Oracle數(shù)據(jù)庫(kù),亦或是達(dá)夢(mèng)數(shù)據(jù)庫(kù),它們的數(shù)據(jù)庫(kù)與實(shí)例的對(duì)應(yīng)都一致。數(shù)據(jù)庫(kù)與實(shí)例間的關(guān)系是一比一,一個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)一個(gè)實(shí)例(此處的數(shù)據(jù)庫(kù)不是MySQL中采取create database ... 命令創(chuàng)建的數(shù)據(jù)庫(kù)),這里的數(shù)據(jù)庫(kù)實(shí)際對(duì)應(yīng)著以數(shù)據(jù)庫(kù)名命名的目錄。對(duì)于實(shí)例,顯而易見都是由一堆后臺(tái)進(jìn)程/線程和一塊共享內(nèi)存組成,用于訪問與修改數(shù)據(jù)庫(kù)數(shù)據(jù)。
MySQL相比Oracle、達(dá)夢(mèng)的一大特色是它的可插拔存儲(chǔ),可根據(jù)不同的場(chǎng)景使用不同的存儲(chǔ),MySQL最初使用的myisam存儲(chǔ),后續(xù)為了支持事務(wù)一致性,很多都使用了innodb存儲(chǔ),這也是目前使用非常廣泛的第三方存儲(chǔ),目前MySQL官方也在開發(fā)同innodb一樣可以支持事務(wù)一致性的自己的存儲(chǔ),下圖就是基于innodb存儲(chǔ)的mysql的體系結(jié)構(gòu)圖,如下:
總體可分為實(shí)例與數(shù)據(jù)庫(kù),前面說過,數(shù)據(jù)庫(kù)對(duì)應(yīng)著磁盤上的一堆文件,而實(shí)例則是一堆后臺(tái)線程與一塊共享內(nèi)存區(qū)構(gòu)成,共享內(nèi)存被后臺(tái)線程所共享。對(duì)于實(shí)例的共享內(nèi)存,主要有buffer pool、redo log buffer、double write、additional memory pool等組成,buffer pool又包含了index page、undo page、insert buffer page、adaptive hash index、data dictionary等內(nèi)存區(qū)域。index page主要緩存從數(shù)據(jù)文件中讀取的數(shù)據(jù),undo page主要緩存DML操作中對(duì)數(shù)據(jù)塊的前鏡像,insert buffer page主要緩存二級(jí)索引的索引數(shù)據(jù),data dictionary主要緩存SQL中涉及到的數(shù)據(jù)字典。而redo log buffer主要緩存數(shù)據(jù)塊的修改操作,double write則是為了保證數(shù)據(jù)的一致性,防止頁損壞等情況下的數(shù)據(jù)不一致。MySQL的共享內(nèi)存區(qū)可類比Oracle與達(dá)夢(mèng)的SGA,當(dāng)然,它們還有自己的PGA(使用Oracle的說法),也就是每個(gè)進(jìn)程/線程都有自己的私有內(nèi)存區(qū),關(guān)于SGA與SGA中包含的內(nèi)存類型則不盡相同,但基本的排序內(nèi)存區(qū)、堆等則都存在,因此在設(shè)置數(shù)據(jù)庫(kù)會(huì)話或連接池或管理空閑會(huì)話時(shí)需要對(duì)此格外注意,防止出現(xiàn)內(nèi)存不足或OOM等情況。對(duì)于常規(guī)的進(jìn)程而言,可類比Oracle的進(jìn)程/線程,如purge thread 清理回滾段、redo log thread 日志刷盤等。
對(duì)于物理結(jié)構(gòu),MySQL與Oracle與達(dá)夢(mèng)數(shù)據(jù)庫(kù)則存在較大差異。總的來說,Oracle與達(dá)夢(mèng)的物理結(jié)構(gòu)基本一致,但Oracle的文件體系比達(dá)夢(mèng)較規(guī)范、較豐富。相比MySQL數(shù)據(jù)庫(kù)則更加簡(jiǎn)單,MySQL數(shù)據(jù)庫(kù)中不存在表空間的概念,它的邏輯概念database可類同Oracle的schema,其下的表則以表定義、表數(shù)據(jù)、表索引等分類存儲(chǔ)在磁盤文件上,并且對(duì)應(yīng)的文件后綴不同。innodb存儲(chǔ)存在聯(lián)機(jī)redo日志,而并沒有歸檔功能,無法將聯(lián)機(jī)redo日志的內(nèi)容歸檔保存。
MySQL中還有許多特別的功能,說是特別,不是說其他數(shù)據(jù)庫(kù)不存在此類功能,只是在使用方式和便利性不同,如MySQL的慢查詢?nèi)罩尽⒊qv內(nèi)存區(qū)的配置等,通過使用變量設(shè)置直接可以使用對(duì)應(yīng)的功能。最后,不得不提的是MySQL安裝包非常小,非常節(jié)省空間,安裝便利程度僅次于達(dá)夢(mèng)數(shù)據(jù)庫(kù)。
總結(jié)
以上是生活随笔為你收集整理的mysql数据库的体系结构包括什么组件_MySQL数据库的体系结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 临夏治子宫内膜异位症最好的医院推荐
- 下一篇: angular4获得焦点事件_Angul