DBA-02 mysql體系結構簡述

1 C/S 模型

兩種連接方式:

TCP/IP:mysql -u root -h 10.0.0.1 -P 3306 -p

Socket:mysql -u root -S /tmp/mysql.sock


2 實例的組成

實例指的是一個躺在磁盤上的程序文件運行在後臺,叫做一個實例。實例的組成分為:

mysqld 啟動進程

master thread

child thread

memory 預分配的內存


3 mysql架構

用戶連接請求-->連接層-->sql層-->存儲引擎層

連接層

1 提供tcp socket協議連接。為了能夠讓用戶連接上數據庫,必須提供必要的連接協議。

2 校驗用戶合法性,進行匹配專門的授權表

3 連接成功,會生成一個對應的線程,保持連接,通過show processlist可以查看到,這個連接負責接收sql語句以及返回執行結果


sql層

1 校驗sql語句的語法以及SQL_MODE

2 校驗sql語句的語義,檢查權限

3 解析sql語句,生成執行計劃樹

4 優化器(根據算法找到代價最低的執行計劃)

5 執行器按照計劃執行sql語句,得出獲取數據的方法

6 提供query cache(默認關閉),一般使用redis

7 記錄操作日誌(binlog) 默認關閉


存儲引擎層

根據sql層提供的方法拿到數據,返回給sql層,sql層結構化成表,再通過連接層返回給用戶


4 mysql存儲結構

邏輯存儲結構

庫 ----》Linux目錄

create database wordpress charset utf8mb4; ----》mkdir /wordpress

show databases; ----》ls /

use wordpress; ----》cd /wordpress


表 ----》Linux的文件

列(字段) 無

列屬性 無

數據行(記錄) ----》Linux數據行

表屬性(元數據) ----》Linux 文件屬性

mysql物理存儲結構

庫: 使用FS上的目錄來表示

表:

MyISAM(ext2)

user.frm : 存儲的表結構(列,列屬性)

user.MYD : 存儲的數據記錄

user.MYI : 存儲索引

InnoDB(XFS)

time_zone.frm : 存儲的表結構(列,列屬性)

time_zone.ibd : 存儲的數據記錄和索引

ibdata1 : 數據字典信息 //類型inode


innodb 段 區 頁

一般情況下(非分區表)

一個表就是一個段

一個段由多個區構成

一個區在(16k),64個連續的頁,1M大小


5 數據庫產品

RDBMS:二維表,有嚴格的行列結構及屬性約束,支持更加複雜的查詢

mysql,oracle,mairadb,pg


NOSQL:沒有嚴格的行列結構,可伸縮性,可擴展性高。

redis: 鍵值數據庫就像在傳統語言中使用的哈希表。你可以通過key來添加、查詢或者刪除數據,鑑於使用主鍵訪問,所以會獲得不錯的性能及擴展性。

mongodb:基於document, 面向文檔數據庫會將數據以文檔的形式儲存。每個文檔都是自包含的數據單元,是一系列數據項的集合。每個數據項都有一個名稱與對應的值,值既可以是簡單的數據類型,如字符串、數字和日期等;也可以是複雜的類型,如有序列表和關聯對象。數據存儲的最小單位是文檔,同一個表中存儲的文檔屬性可以是不同的,數據可以使用XML、JSON或者JSONB等多種形式存儲。

wide column: 列存儲數據庫將數據儲存在列族(column family)中,一個列族存儲經常被一起查詢的相關數據。舉個例子,如果我們有一個Person類,我們通常會一起查詢他們的姓名和年齡而不是薪資。這種情況下,姓名和年齡就會被放入一個列族中,而薪資則在另一個列族中。

NEWSQL:分佈式數據庫


分享到:


相關文章: