1. MySQL體繫結構和存儲引擎——MySQL體繫結構、存儲引擎、連接MySQL

来源:https://www.cnblogs.com/jjfan0327/archive/2020/04/08/12660045.html
-Advertisement-
Play Games

一、MySQL體繫結構和存儲引擎 儘管各個平臺在底層(如線程)實現方面都各不相同,但MySQL基本上能保證在各個平臺上的物理結構的一致性。因此,用戶應該能很好的理解MySQL資料庫在所有這些平臺是如何運作的。 1.1 定義資料庫和實例 資料庫:物理操作系統文件或其他形式文件類型的集合。在MySQL數 ...


一、MySQL體繫結構和存儲引擎

儘管各個平臺在底層(如線程)實現方面都各不相同,但MySQL基本上能保證在各個平臺上的物理結構的一致性。因此,用戶應該能很好的理解MySQL資料庫在所有這些平臺是如何運作的。

1.1 定義資料庫和實例

資料庫:物理操作系統文件或其他形式文件類型的集合。在MySQL資料庫中,資料庫文件可以是frm、myd、myi、ibd文件。NDB引擎,是存放於記憶體之中的文件,但定義不變。

實例:MySQL資料庫由後臺線程以及一個共用記憶體區組成。共用記憶體可以被運行的後臺線程所共用。在集群情況下,可能存在一個資料庫被多個數據實例使用的情況。

從概念上來講,資料庫是文件的集合,是按照某種數據模型組織起來並存放於二級存儲器中的數據集合。

資料庫實例是程式,是位於用戶與操作系統之間的一層數據管理軟體,用戶對資料庫數據的任何操作,包括資料庫定義、數據查詢、數據維護、資料庫運行控制等都是在資料庫實例下進行的,應用程式只有通過資料庫實例才能和資料庫打交道。

 

MySQL 是一個單進程多線程架構的資料庫。

MySQL 資料庫是按照 /etc/my.cnf -> /etc/myssql/my.cnf -> /usr/local/mysql/etc/my.cnf -> ~/.my.cnf 的順序讀取配置文件的。

如果幾個配置文件中有相同的參數,MySQL資料庫以最後讀取到的一個配置文件中的參數為準。

1.2 MySQL 體繫結構

 

 由圖可知,MySQL由以下幾部分組成:

  • 連接池組件
  • 管理服務和工具組件
  • SQL介面組件
  • 查詢分析器組件
  • 優化器組件
  • 緩衝(Cache)組件
  • 插件式存儲引擎
  • 物理文件

MySQL區別於其他資料庫的最重要的一個特點就是插件式的表存儲引擎,註意,存儲引擎是基於表的。

1.3 MySQL存儲引擎

1.3.1 InnoDB 存儲引擎

  其設計目標主要是面向線上事務處理(OLTP)的應用。其特點是支持事務、行鎖設計、支持外鍵、非鎖定讀(MVCC,即預設讀取操作不會產生鎖)。在MySQL5.5.8以後,InnoDB是預設的存儲引擎。

  InnoDB通過使用多版本併發控制(MVCC)來獲得高併發,並實現了四種隔離級別,預設是 REPEATABLE級別

  使用next-key locking 的策略來避免幻讀現象

  提供了插入緩衝(insert buffer)、二次寫(double write)、自適應哈希索引(adaptive hash index)、預讀(read ahead)等高性能和高可用的功能

  對錶中的數據採用聚集(clustered)方式,因此每張表都是按照主鍵的順序進行存放,如果沒有在表定義中指定主鍵,InnoDB存儲引擎將會為每一行生成一個6位元組的ROWID,並以此作為主鍵。

1.3.2 MyISAM存儲引擎

  不支持事務、表鎖設計、支持全文索引,主要面向OLAP應用

  MySQL 5.5.8 之前的預設存儲引擎

  緩衝池只緩存索引文件,不緩存數據文件。數據文件由操作系統本身來完成

1.3.3 NDB 存儲引擎數據

  省略

 

1.5 鏈接 MySQL

連接 MySQL操作是一個連接進程和MySQL資料庫實例進行通信。從程式設計的角度的來看,本質是進程通信。常見的進程通信方式有

管道、命名管道、命名字、TCP/IP套接字、UNIX域套接字。

1.5.1 TCP/IP 通信

這種方式在 TCP/IP 連接上建立一個基於網路的連接請求,一般情況下,客戶端在一臺伺服器,而MySQL實例(服務端)在另一臺伺服器,機器之間通過 TCP/IP 進行網路連接。

 在通過TCP/IP 連接到MySQL 實例時,MySQL 資料庫會先檢查一張許可權視圖,用來判斷發起請求的客戶端是否允許連接到MySQL實例。

1.5.2 命名管道和共用記憶體

如果兩個需要進程通信的進程在同一個伺服器上,那麼可以使用命名管道。MySQL 4.1 之後,還提供了共用記憶體的連接方式。

1.5.3 UNIX 域套接字

在Linux 和 UNIX環境下,還可以使用UNIX 域套接字。UNIX 套接在不是一個協議,所以只能在 MySQL 客戶端和資料庫實例在同一臺伺服器上的情況下使用。

問題:當表的數據量大於1000萬時,MySQL性能會急劇下降嗎?

隨著行數的增加,性能會有所下降,但並不是線性下降,如果用戶選擇了正確的存儲引擎,正確的配置,再多的數據量MySQL也能承受。如官方手冊提及的,在InnoDB存儲超過1TB的數據,處理插入、更新的操作平均 800次/秒。

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 本實驗是在centos8下搭建,搭建方式為yum(dnf)搭建,畢竟源碼搭建難度大,還要解決各種依賴關係,在搭建體驗與步驟上,與7代差別其實不大,也可能是我太菜了體會不到,最直觀的可能是版本問題,php預設版本由以前的5.x升級到了7.x,apache版本升級到了2.4,性能和效率上都有所提高 ...
  • 一 實踐規劃 1.1 實踐需求 本實驗通過資源配額和資源配置範圍的配合來控制一個命名空間的資源使用。 集群管理員根據集群用戶的數量來調整集群配置,以達到這個目的:能控制特定命名空間中的資源使用量,最終實現集群的公平使用和成本控制。 需要實現的功能如下: 限制運行狀態的Pod的計算資源用量。 限制持久 ...
  • 系統版本CentOS6.10_x64 開啟防火牆命令:service iptables start 關閉防火牆命令:service iptables stop 重啟防火牆命令:service iptables restart 查看防火牆狀態:service iptables status linux ...
  • 前言: 2020年3月7日晚7點,大佬張祥在微信群向大家詳細介紹了58同城HBase平臺及其生態的建設實踐與相關經驗,確實講得很好。今天花了點時間幫大家整理了一下,希望更多的沒有參與直播的朋友能夠看到它,也歡迎大家積極轉發一下,視頻與PPT 相關資料附於文末 。 亮點在哪 該分享的亮點在哪兒里呢?這 ...
  • 用單表接近一千萬數據(四列:int,兩個varchar,日期時間)測,發現幾個效率幾乎一致 count(0)=count(1)=count(數字)=count(*)>count(primary key)>count(column) 根據相關解釋: 1. count(指定的有效值)--執行計劃都會轉化 ...
  • 在高性能mysql第三版里,說到hash索引以下優缺點: 用MySQL(5.7.)測的時候發現可以範圍查詢。 ...
  • 我所做的商城項目前些時提了新需求,要求前臺搜索商品除了能通過商品名稱搜索到以外,還可以通過別個信息搜索,比如:商品編號、詳情內容描述等等,類似於全文搜索了。我首先想到的就是lucene,但是對代碼這樣的改動量就太大了。。。。目前線上版本如果做這種改動怕測試又出什麼么蛾子,如果又重新建表將這些信息另外 ...
  • 題目如下: 1.查詢sC表中的全部數據。2. 查詢電腦系學生的姓名和年齡3.查詢成績在70~80分的學生的學號、課程號和成績4.查詢電腦系年齡在18~20歲的男生姓名和年齡s.查詢C001課程的最高分6.查詢電腦系學生的最大年齡和最小年齡7.統計每個系的學生人數8.統計每]課程的選課人數和最高 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...