数据库高级知识——mysql架构介绍(二)
生活随笔
收集整理的這篇文章主要介紹了
数据库高级知识——mysql架构介绍(二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1.Mysql邏輯架構介紹
- 1.1 總體概覽
- 1.2 查詢說明
- 2.Mysql存儲引擎
- 2.1 查看命令
- 2.2 各個引擎簡介
- 2.3 MyISAM和InnoDB
- 2.4 阿里巴巴、淘寶用哪個
1.Mysql邏輯架構介紹
1.1 總體概覽
和其它數據庫相比,MySQL有點與眾不同,它的架構可以在多種不同場景中應用并發揮良好作用。 主要體現在存儲引擎的架構上,插件式的存儲引擎架構將查詢處理和其它的系統任務以及數據的存儲提取相分離。 這種架構可以根據業務的需求和實際需要選擇合適的存儲引擎。1.連接層
最上層是一些客戶端和連接服務,包含本地sock通信和大多數基于客戶端/服務端工具實現的類似于tcp/ip的通信。主要完成一些類似于連接處理、授權認證、及相關的安全方案。在該層上引入了線程池的概念,為通過認證安全接入的客戶端提供線程。同樣在該層上可以實現基于SSL的安全鏈接。服務器也會為安全接入的每個客戶端驗證它所具有的操作權限。2.服務層
2.1 Management Serveices & Utilities: 系統管理和控制工具 2.2 SQL Interface: SQL接口接受用戶的SQL命令,并且返回用戶需要查詢的結果。比如select from就是調用SQL Interface 2.3 Parser: 解析器SQL命令傳遞到解析器的時候會被解析器驗證和解析。 2.4 Optimizer: 查詢優化器。SQL語句在查詢之前會使用查詢優化器對查詢進行優化。 用一個例子就可以理解: select uid,name from user where gender= 1;優化器來決定先投影還是先過濾。 2.5 Cache和Buffer: 查詢緩存。如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數據。這個緩存機制是由一系列小緩存組成的。比如表緩存,記錄緩存,key緩存,權限緩存等緩存是負責讀,緩沖負責寫。3.引擎層
存儲引擎層,存儲引擎真正的負責了MySQL中數據的存儲和提取,服務器通過API與存儲引擎進行通信。不同的存儲引擎具有的功能不同,這樣我們可以根據自己的實際需要進行選取。后面介紹MyISAM和InnoDB4.存儲層
數據存儲層,主要是將數據存儲在運行于裸設備的文件系統之上,并完成與存儲引擎的交互。1.2 查詢說明
查詢流程圖:
2.Mysql存儲引擎
2.1 查看命令
看你的mysql現在已提供什么存儲引擎:
mysql> show engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 9 rows in set (0.00 sec)看你的mysql當前默認的存儲引擎:
mysql>show variables like '%storage_engine%'; +---------------------------------+-----------+ | Variable_name | Value | +---------------------------------+-----------+ | default_storage_engine | InnoDB | | default_tmp_storage_engine | InnoDB | | disabled_storage_engines | | | internal_tmp_mem_storage_engine | TempTable | +---------------------------------+-----------+ 4 rows in set (0.02 sec)2.2 各個引擎簡介
1、InnoDB存儲引擎 InnoDB是MySQL的默認事務型引擎,它被設計用來處理大量的短期(short-lived)事務。 除非有非常特別的原因需要使用其他的存儲引擎,否則應該優先考慮InnoDB引擎。行級鎖,適合高并發情況2、MyISAM存儲引擎 MyISAM提供了大量的特性,包括全文索引、壓縮、空間函數(GIS)等, 但MyISAM不支持事務和行級鎖(myisam改表時會將整個表全鎖住),有一個毫無疑問的缺陷就是崩潰后無法安全恢復。3、Archive引擎 Archive存儲引擎只支持INSERT和SELECT操作,在MySQL5.1之前不支持索引。 Archive表適合日志和數據采集類應用。適合低訪問量大數據等情況。 根據英文的測試結論來看,Archive表比MyISAM表要小大約75%,比支持事務處理的InnoDB表小大約83%。4、Blackhole引擎 Blackhole引擎沒有實現任何存儲機制,它會丟棄所有插入的數據,不做任何保存。 但服務器會記錄Blackhole表的日志,所以可以用于復制數據到備庫,或者簡單地記錄到日志。 但這種應用方式會碰到很多問題,因此并不推薦。5、CSV引擎 CSV引擎可以將普通的CSV文件作為MySQL的表來處理,但不支持索引。 CSV引擎可以作為一種數據交換的機制,非常有用。 CSV存儲的數據直接可以在操作系統里,用文本編輯器,或者excel讀取。6、Memory引擎 如果需要快速地訪問數據,并且這些數據不會被修改,重啟以后丟失也沒有關系,那么使用Memory表是非常有用。Memory表至少比MyISAM表要快一個數量級。(使用專業的內存數據庫更快,如redis)7、Federated引擎 Federated引擎是訪問其他MySQL服務器的一個代理,盡管該引擎看起來提供了一種很好的跨服務器的靈活性, 但也經常帶來問題,因此默認是禁用的。2.3 MyISAM和InnoDB
| 主外鍵 | 不支持 | 支持 |
| 事務 | 不支持 | 支持 |
| 行表鎖 | 表鎖,即使操作一條記錄也會鎖住整個表,不適合高并發的操作 | 行鎖,操作時只鎖某一行,不對其它行有影響,適合高并發的操作 |
| 緩存 | 只緩存索引,不緩存真實數據 | 不僅緩存索引還要緩存真實數據,對內存要求較高,而且內存大小對性能有決定性的影響 |
| 表空間 | 小 | 大 |
| 關注點 | 性能 | 事務 |
| 默認安裝 | Y | Y |
| 用戶表默認使用 | N | Y |
| 自帶系統表使用 | Y | N |
2.4 阿里巴巴、淘寶用哪個
Percona 為 MySQL 數據庫服務器進行了改進,在功能和性能上較 MySQL 有著很顯著的提升。 該版本提升了在高負載情況下的 InnoDB 的性能、為 DBA 提供一些非常有用的性能診斷工具; 另外有更多的參數和命令來控制服務器行為。該公司新建了一款存儲引擎叫xtradb完全可以替代innodb,并且在性能和并發上做得更好,阿里巴巴大部分mysql數據庫其實使用的percona的原型加以修改。 AliSql+AliRedis總結
以上是生活随笔為你收集整理的数据库高级知识——mysql架构介绍(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux标准I/O——按行输入和输出
- 下一篇: 数据库高级知识——查询截取分析(一)