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