數據庫blog5_數據庫軟件架構介紹(以Mysql為例)

在這里插入圖片描述



🌿軟件的架構

🍂分類

軟件架構總結為兩種主要類型:一體式架構和分布式架構

● 一體化架構

一體式架構是一種將所有功能集成到一個單一的、不可分割的應用程序中的架構模式。這種架構通常是一個大型的、復雜的單一應用程序,包含所有功能模塊。

特點
簡單:部署簡單,不需要復雜的分布式系統管理。
性能優化:由于所有組件都在同一個進程中運行,通信效率高。
可維護性差:代碼庫龐大,難以維護和擴展。
擴展性差:難以水平擴展,通常需要垂直擴展(增加硬件資源)。

● 分布式架構

分布式架構是一種將應用程序分解為多個獨立的組件或服務,并將這些組件或服務部署在不同的服務器或節點上的架構模式。分布式架構可以進一步細分為多種具體模式,如C/S架構、B/S架構、微服務架構等。

特點
高可維護性:各組件可以獨立開發和測試,便于維護。
高可擴展性:可以通過增加服務器數量或優化服務器性能來擴展。
靈活性:可以使用不同的技術棧開發不同的組件。
復雜性:部署和管理相對復雜,需要處理網絡通信、數據一致性等問題。

○ 分布式架構————C/S端架構

客戶端(Client)是指與服務器端(Server)進行交互的軟件或應用程序。客戶端可以是專門為服務器端設計的,也可以是通用的軟件,具體取決于應用場景和需求。

  • 專用客戶端:這些客戶端是專門為某個特定的服務器端應用程序設計的,通常具有豐富的功能和優化,以提供最佳的用戶體驗。)例如,數據庫管理工具(如MySQL Workbench)、企業級的ERP客戶端等。)
  • 通用客戶端:這些客戶端是通用的軟件,可以通過連接器或中間件與多種服務器端應用程序進行交互。(例如,Web瀏覽器、通用的API客戶端工具(如Postman)等。)

C(客戶端)/S(服務器端)架構,S端是核心,C端負責交互和請求發起,以及展示服務器端的返回結果

  • C端
`定義:`客戶端是用戶與系統交互的界面,負責接收用戶輸入、顯示結果,并向服務器端發送請求。
`功能:`用戶界面:提供用戶交互界面,如圖形用戶界面(GUI)或命令行界面(CLI)。請求生成:根據用戶輸入生成請求,并將其發送到服務器端。結果展示:接收服務器端返回的結果,并將其展示給用戶。本地處理:在某些情況下,客戶端可能 會進行一些本地處理,如數據緩存、輸入驗證等。
  • S端
`定義:`服務器端是系統的后端,負責處理客戶端的請求,并返回結果。
`功能:`請求處理:接收客戶端的請求,解析請求內容,并進行相應的處理。數據管理:管理數據存儲、查詢、更新等操作。業務邏輯:實現系統的業務邏輯,如數據驗證、事務處理等。資源管理:管理系統的資源,如內存、磁盤、網絡等。

從廣義上來說,B/S(瀏覽器/服務器)架構和P2P(對等網絡)架構都可以看作是C/S(客戶端/服務器)架構的變體。

○ 客戶端與服務器端的兩種架構
本地C端 + 本地S端

在這種架構中,客戶端和服務器端都運行在同一臺計算機上。客戶端通過本地通信機制與服務器端進行交互。
通信方式

  • 通過本地通信機制
共享內存:多個進程共享同一塊內存區域,用于快速數據交換。
消息隊列:一個進程向隊列中寫入消息,另一個進程從隊列中讀取消息。
管道(Pipe):一種半雙工的通信方式,數據只能單向流動。
套接字(Socket):一種通用的進程間通信機制,支持不同主機上的進程之間的通信。在本地環境下,可以使用Unix Domain Socket來實現高效的進程間通信。
遠程過程調用(RPC):允許一個程序(客戶端)調用另一個程序(服務器端)中的過程或函數,就像調用本地函數一樣。
  • 通過網絡層通信
TCP/IP協議棧:包括傳輸控制協議(TCP)和互聯網協議(IP),用于可靠的數據傳輸。
HTTP/HTTPS協議:用于客戶端(如瀏覽器)與服務器之間進行超文本傳輸。HTTPS是HTTP的安全版本,通過SSL/TLS加密來保護數據傳輸的安全。
其他協議:如FTP(文件傳輸協議)、SMTP(簡單郵件傳輸協議)等,用于特定類型的網絡通信。
本地C端 + 遠程S端

客戶端和服務器端通過網絡進行通信,支持跨主機、跨網絡的交互。
通信方式————通過網絡層通信

TCP/IP協議棧:包括傳輸控制協議(TCP)和互聯網協議(IP),用于可靠的數據傳輸。
HTTP/HTTPS協議:用于客戶端(如瀏覽器)與服務器之間進行超文本傳輸。HTTPS是HTTP的安全版本,通過SSL/TLS加密來保護數據傳輸的安全。
其他協議:如FTP(文件傳輸協議)、SMTP(簡單郵件傳輸協議)等,用于特定類型的網絡通信。

數據傳輸格式:

JSON(JavaScript Object Notation):一種輕量級的數據交換格式,易于閱讀和編寫,也易于機器解析和生成。
XML(可擴展標記語言):一種標記語言,用于標記電子文件使其具有結構性。
二進制格式:如Protocol Buffers(由Google開發的一種語言無關、平臺無關的數據序列化方法),用于高效的數據傳輸。



🌿數據庫軟件

即數據、數據庫和數據庫管理系統組成的數據庫軟件,而人使用維護組成了數據庫系統。所以,我們單純的討論數據庫軟件時,指的是數據、數據庫、數據庫管理系統,而非數據庫系統。

🍂數據庫架構圖

在這里插入圖片描述

由圖可知,軟件分為客戶端與S端,其中C端和S端都可以看作軟件,由此客戶端也有自己的完整設計,只是功能是與服務器交互。服務器則負責了核心功能,可以看到,它包含了相關工具、存儲引擎以及其它核心內容。這里不一一說明了。把C/S看作兩個軟件就好。

  • 數據庫可以獨立于數據管理軟件進行存儲。數據庫的核心功能是數據的存儲和管理,但數據的實際存儲方式和位置可以靈活配置。
  • C端可以與S端分開存在
  • 除了專門的連接數據庫的專門客戶端(如,Mysql Client、navicat…)其它軟件也可以連接到數據庫服務器端。它們靠連接器(JDBK)、中間件或者其它軟件作為中介來與數據庫服務器端交互。(其中專門的客戶端也是配備了連接器的)

🍂數據庫的客戶端

客戶端,簡言之,能和數據庫交互的關鍵在于連接器。數據庫專門客戶端分為命令行界面 和 圖形化界面。此外,還有第三方的數據庫客戶端,所以也可以看出關鍵在于連接器。
特點

用戶界面:提供用戶交互界面,如圖形用戶界面(GUI)或命令行界面(CLI)。
請求生成:根據用戶輸入生成SQL語句或其他數據庫操作請求,并將其發送到服務器端。
結果展示:接收服務器端返回的查詢結果,并將其展示給用戶。
本地處理:在某些情況下,客戶端可能會進行一些本地處理,如數據緩存、輸入驗證等。

注意:

  • 一個客戶端可以連接多個服務器端
  • 客戶端使用時要打開
  • 客戶端類型
    • 專用客戶端:通常會直接配備連接器,以便與服務器端進行高效、優化的通信。在某些情況下,也會通過中間件與服務器端交互,以利用中間件提供的額外功能。
    • 通用客戶端:通常會使用連接器或中間件與服務器端進行交互。通用客戶端的設計目標是兼容多種服務器端應用程序,因此通常會通過中間件來提高通用性和靈活性。

🍂數據庫的服務器端

服務器端,即數據庫軟件的核心,注意,服務器端指的不是服務器,而是服務器上的一個軟件。即一個服務器上,可以運行多個服務器端軟件(如,web服務器端、郵件服務器端、數據庫服務器端),同時也可以有多個不同類型的數據庫的服務器端(如,Mysql、redis服務器端)

注意:

  • 一個數據庫服務器端可以同時與多個客戶端(本質:連接器)連接
  • 服務器端使用時候也要打開(這就是為啥學習Mysql時候使用時要先數據命令打開數據庫服務器端(CMD:net start mysql)

● 組成軟件之一————存儲引擎

  • 存儲引擎負責管理數據的物理存儲和檢索。它決定了數據如何存儲在磁盤上,如何進行索引,以及如何高效地讀取和寫入數據。
  • 存儲引擎是數據存儲結構的實現關鍵:存儲引擎是數據存儲結構實現的關鍵。存儲引擎負責管理數據的物理存儲和檢索,決定了數據如何存儲在磁盤上,如何進行索引,以及如何高效地讀取和寫入數據。它是數據庫系統中負責數據存儲和檢索的核心組件

功能:

數據存儲:將數據持久化存儲到磁盤。
數據檢索:高效地讀取數據。
索引管理:創建和管理索引,以加速查詢。
事務管理:支持事務的ACID(原子性、一致性、隔離性、持久性)特性。
并發控制:管理多個用戶對數據的并發訪問。

存儲引擎介紹

數據庫系統存儲引擎支持事務鎖類型適用場景其他特點
MySQLInnoDB行級鎖高并發和事務支持的場景支持外鍵,高性能讀寫操作
MySQLMyISAM表級鎖讀多寫少的場景查詢速度快,支持全文索引
MySQLMEMORY表級鎖臨時數據存儲和高速緩存場景數據存儲在內存中,訪問速度快
PostgreSQL默認引擎行級鎖復雜查詢和事務支持的場景強大的事務支持和并發控制
SQLite默認引擎表級鎖小型應用和開發環境輕量級嵌入式數據庫
MongoDBWiredTiger文檔級鎖高性能和并發支持的場景支持壓縮,減少存儲空間
MongoDBMMAPv1集合級鎖讀多寫少的場景使用內存映射文件進行數據存儲
Cassandra默認引擎分布式鎖大規模數據存儲和高并發訪問分布式架構,高可用性和水平擴展

● 組成軟件之一————查詢處理器

查詢處理器負責解析和執行SQL語句,將用戶的查詢請求轉換為數據庫可以理解的操作。

功能:

SQL解析:將SQL語句解析為內部的查詢計劃。
查詢優化:優化查詢計劃,以提高查詢效率。
執行引擎:執行查詢計劃,返回查詢結果。

● 組成軟件之一————事務管理器

事務管理器負責管理事務的ACID特性,確保數據的一致性和完整性。

功能:

事務控制:管理事務的開始、提交和回滾。
鎖管理:管理數據的鎖,以實現并發控制。
日志管理:記錄事務日志,用于恢復和回滾。

● 組成軟件之一————存儲管理

存儲管理負責管理數據庫的物理存儲,包括文件系統、磁盤空間等。

功能:

文件管理:管理數據文件和日志文件。
空間管理:管理磁盤空間的分配和回收。
備份和恢復:提供數據備份和恢復功能。

🍂數據庫的連接器/其它軟件

想讓自己開發的軟件連接到數據庫,就要使用對應的連接器或者其它軟件(如,中間件)

如果不使用專門的客戶端(客戶端自帶連接器),就要自己給自己的軟件配置連接器或者其它軟件才可以與數據庫服務器端連接。

數據庫連接器

(也稱為數據庫驅動程序)是客戶端與數據庫服務器之間通信的橋梁。它負責建立和管理連接,發送請求,接收響應等。

  • 特點
    • 建立連接:負責初始化與數據庫服務器的網絡連接。
    • 發送請求:將客戶端的請求(如SQL語句)轉換為數據庫服務器能夠理解的格式,并通過網絡發送給服務器。
    • 接收響應:接收數據庫服務器返回的結果,并將其轉換為客戶端能夠理解的格式。
    • 管理連接:負責管理連接的生命周期,包括連接的打開、關閉、超時處理等。

連接器和其它軟件總結

  • 數據庫連接器:是客戶端與數據庫服務器之間通信的橋梁,負責建立和管理連接,發送請求,接收響應等。
  • 專用客戶端:通常會直接配備連接器,以便與服務器端進行高效、優化的通信。在某些情況下,也會通過中間件與服務器端交互,以利用中間件提供的額外功能。
  • 通用客戶端:通常會使用連接器或中間件與服務器端進行交互。通用客戶端的設計目標是兼容多種服務器端應用程序,因此通常會通過中間件來提高通用性和靈活性。
  • 中間件:提供額外的服務和功能,如連接池管理、事務處理、安全認證等,提高系統的性能和可維護性。



🌿數據庫在項目中的地位

在這里插入圖片描述
實際中,一個公司往往會需要像用戶提供各種服務(如,電子郵件服務用來驗證、數據庫服務用來存儲用戶的信息、web服務器向用戶發送網頁文件…)

  • 所以,一個公司往往有多個服務器用于不同目的,多個服務器間也可以有聯系(這就導致網絡攻擊可以沿著它們之間傳播,見《網絡空間系統安全概率》的lucky公司攻擊案例)
  • 同時,數據集中存儲在一個服務器上容易出問題(比如一旦被攻擊信息可能就不可挽回的丟失了)。由此,公司會對數據庫采取其它架構來保障數據安全。見中心化的介紹

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/84505.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84505.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/84505.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

離線服務器算法部署環境配置

本文將詳細記錄我如何為一臺全新的離線服務器配置必要的運行環境,包括基礎編譯工具、NVIDIA顯卡驅動以及NVIDIA-Docker,以便順利部署深度學習算法。 前提條件: 目標離線服務器已安裝操作系統(本文以Ubuntu 18.04為例&#xff09…

chromedp -—— 基于 go 的自動化操作瀏覽器庫

chromedp chromedp 是一個用于 Chrome 瀏覽器的自動化測試工具,基于 Go 語言開發,專門用于控制和操作 Chrome 瀏覽器實例。 chromedp 安裝 go get -u github.com/chromedp/chromedp基于chromedp 實現的的簡易學習通刷課系統 目前實現的功能&#xff…

高級特性實戰:死信隊列、延遲隊列與優先級隊列(三)

四、優先級隊列:優先處理重要任務 4.1 優先級隊列概念解析 優先級隊列(Priority Queue)是一種特殊的隊列數據結構,它與普通隊列的主要區別在于,普通隊列遵循先進先出(FIFO)的原則,…

python打卡day34

GPU訓練及類的call方法 知識點回歸: CPU性能的查看:看架構代際、核心數、線程數GPU性能的查看:看顯存、看級別、看架構代際GPU訓練的方法:數據和模型移動到GPU device上類的call方法:為什么定義前向傳播時可以直接寫作…

Newtonsoft Json序列化數據不序列化默認數據

問題描述 數據在序列號為json時,一些默認值也序列化了,像旋轉rot都是0、縮放scal都是1,這樣的默認值完全可以去掉,減少和服務器通信數據量 核心代碼 數據結構字段增加[DefaultValue(1.0)]屬性,縮放的默認值為1 public class Vec3DataOne{[DefaultValue(1.0)] public flo…

可增添功能的鼠標右鍵優化工具

軟件介紹 本文介紹一款能優化Windows電腦的軟件,它可以讓鼠標右鍵菜單添加多種功能。 軟件基本信息 這款名為Easy Context Menu的鼠標右鍵菜單工具非常小巧,軟件大小僅1.14MB,打開即可直接使用,無需進行安裝。 添加功能列舉 它…

Gemini 2.5 Pro 一次測試

您好,您遇到的重定向循環問題,即在 /user/messaging、/user/login?return_to/user/messaging 和 /user/login 之間反復跳轉,通常是由于客戶端的身份驗證狀態檢查和頁面重定向邏輯存在沖突或競爭條件。 在分析了您提供的代碼(特別…

vue3前端后端地址可配置方案

在開發vue3項目過程中,需要切換不同的服務器部署,代碼中配置的服務需要可靈活配置,不隨著run npm build把網址打包到代碼資源中,不然每次切換都需要重新run npm build。需要一個配置文件可以修改服務地址,而打包的代碼…

大模型微調與高效訓練

隨著預訓練大模型(如BERT、GPT、ViT、LLaMA、CLIP等)的崛起,人工智能進入了一個新的范式:預訓練-微調(Pre-train, Fine-tune)。這些大模型在海量數據上學習到了通用的、強大的表示能力和世界知識。然而,要將這些通用模型應用于特定的下游任務或領域,通常還需要進行微調…

編程技能:字符串函數10,strchr

專欄導航 本節文章分別屬于《Win32 學習筆記》和《MFC 學習筆記》兩個專欄,故劃分為兩個專欄導航。讀者可以自行選擇前往哪個專欄。 (一)WIn32 專欄導航 上一篇:編程技能:字符串函數09,strncmp 回到目錄…

動態規劃-53.最大子數組和-力扣(LeetCode)

一、題目解析 在給定順序的數組中找出一段具有最大和的連續子數組,且大小最小為1. 二、算法原理 1.狀態表示 我們可以意一一枚舉出所有的子數組,但我們想要的是最大子數組,所以f[i]表示:以i位置為結尾,所有子數組的最…

C++ queue對象創建、queue賦值操作、queue入隊、出隊、獲得隊首、獲得隊尾操作、queue大小操作、代碼練習

對象創建&#xff0c;代碼見下 #include<iostream> #include<queue>using namespace std;int main() {// 1 默認構造函數queue<int> q1;// 2 拷貝構造函數queue<int> q2(q1);return 0;} queue賦值操作&#xff0c;代碼見下 #include<iostream>…

全鏈路解析:影刀RPA+Coze API自動化工作流實戰指南

在數字化轉型加速的今天&#xff0c;如何通過RPA與API的深度融合實現業務自動化提效&#xff0c;已成為企業降本增效的核心命題。本文以「影刀RPA」與「Coze API」的深度協作為例&#xff0c;系統性拆解從授權配置、數據交互到批量執行的完整技術鏈路&#xff0c;助你快速掌握跨…

php本地 curl 請求證書問題解決

錯誤: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for 解決方案 在php目錄下創建證書文件夾, 執行下面生成命令, 然后在php.ini 文件中配置證書路徑; 重啟環境 curl --eta…

【圖數據庫】--Neo4j 安裝

目錄 1.Neo4j --概述 2.JDK安裝 3.Neo4j--下載 3.1.下載資源包 3.2.創建環境變量 3.3.運行 Neo4j 是目前最流行的圖形數據庫(Graph Database)&#xff0c;它以節點(Node)、關系(Relationship)和屬性(Property)的形式存儲數據&#xff0c;專門為處理高度連接的數據而設計。…

MIT 6.S081 2020Lab5 lazy page allocation 個人全流程

文章目錄 零、寫在前面一、Eliminate allocation from sbrk()1.1 說明1.2 實現 二、Lazy allocation2.1 說明2.2 實現 三、Lazytests and Usertests3.1 說明3.2 實現3.2.1 lazytests3.2.2 usertests 零、寫在前面 可以閱讀下4.6頁面錯誤異常 像應用程序申請內存&#xff0c;內…

(Git) 稀疏檢出(Sparse Checkout) 拉取指定文件

文章目錄 &#x1f3ed;作用&#x1f3ed;指令總覽&#x1f477;core.sparseCheckout&#x1f477;sparse-checkout 文件 &#x1f3ed;實例演示?END&#x1f31f;交流方式 &#x1f3ed;作用 類似于 .gitignore 進行文件的規則匹配。 一般在需要拉取大型項目指定的某些文件…

docker初學

加載鏡像&#xff1a;docker load -i ubuntu.tar 導出鏡像&#xff1a;docker save -o ubuntu1.tar ubuntu 運行&#xff1a; docker run -it --name mu ubuntu /bin/bash ocker run -dit --name mmus docker.1ms.run/library/ubuntu /bin/bash 進入容器&#xff1a;docke…

Docker系列(二):開機自啟動與基礎配置、鏡像加速器優化與疑難排查指南

引言 docker 的快速部署與高效運行依賴于兩大核心環節&#xff1a;基礎環境搭建與鏡像生態優化。本期博文從零開始&#xff0c;系統講解 docker 服務的管理配置與鏡像加速實踐。第一部分聚焦 docker 服務的安裝、權限控制與自啟動設置&#xff0c;確保環境穩定可用&#xff1b…

計算機視覺(圖像算法工程師)學習路線

計算機視覺學習路線 Python基礎 常量與變量 列表、元組、字典、集合 運算符 循環 條件控制語句 函數 面向對象與類 包與模塊Numpy Pandas Matplotlib numpy機器學習 回歸問題 線性回歸 Lasso回歸 Ridge回歸 多項式回歸 決策樹回歸 AdaBoost GBDT 隨機森林回歸 分類問題 邏輯…