整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          解析幾種常用關系型數據庫架構 | 周末送資料

          【摘要】常用的關系型數據庫有閉源系列和開源系列,閉源系列有國外數據庫(如Oracle、DB2等)和國產數據庫(如GaussDB T等);開源系列有MySQL、等。本文擬介紹幾種常用關系型數據庫的架構和實現原理,以方便廣大用戶更進一步了解。涉及產品最新參數指標等請以各官網為準。

          【作者】范永清,系統架構師,現就職于廈門銀行信息技術部,目前主要負責廈門銀行技術架構設計。

          一、 Oracle

          (一) Oracle 架構

          Oracle Server包括數據庫()和實例()兩大部分,兩者相互獨立。數據庫由數據文件 、控制文件和日志文件組成,實例由內存池和后臺進程組成,示意圖如下:

          數據庫概念結構的設計步驟_數據庫概念結構設計步驟_數據庫概念結構設計步驟

          一臺Oracle Server可創建多個,不同的之間相互獨立。每個有屬于自己的全套相關文件,如:密碼文件,參數文件,數據文件,控制文件和日志文件

          由一系列物理文件(如二維表文件)組成。用戶不能直接讀取中的內容,必須通過Oracle 才能讀取,一個只能連接一個,但是一個可以被多個連接。

          各功能組件說明如下:

          1、用戶連接進程

          用戶連接進程是連接用戶和Oracle 的橋梁。包括:用戶進程、服務進程和PGA

          當一個 User請求連接到Oracle Server時,Oracle Server創建的User Process。

          用于處理 User和Oracle Server之間的連接。

          PGA:由Server Process分配,用于當前User Session的內存區,不同的用戶擁有不同的PGA。PGA包含了Server Process數據和控制信息的內存區域。包括棧空間、 Session Info、 私有SQL區。

          2、SGA(System Global Area)

          SGA與Oracle性能息息相關,在啟動時被分配,關閉時被釋放。主要包含如下幾種數據結構:

          oracle 執行SQL語句的區域。當進行數據更新或數據查詢時,用戶執行的SQL語句不會直接對磁盤上的數據文件進行更改操作,而是首先將數據文件復制到數據庫緩沖區緩存,再更改或查詢緩存中的副本。此外,被頻繁訪問的數據塊會存在于數據庫緩沖區緩存中。

          用于短期存儲redo log。

          用于緩存所有頻繁執行的代碼和頻繁訪問的對象定義。共享池內有下列三種數據結構:

          用于共享的服務器進程。

          只有當應用程序需要在數據庫中運行java存儲程序時,才需要java池。

          3、后臺進程

          后臺進程主要用于數據庫管理 ,是Oracle 和Oracle 的聯系紐帶,分為核心進程和非核心進程。

          1) 核心進程:

          Server process連接Oracle后,通過數據庫寫進程(DBWn)將數據緩沖區中的“臟緩沖區” 的數據塊寫入到數據文件;

          (CKPT)檢查點進程主要用于更新數據文件頭,更新控制文件和觸發DBWn數據庫寫進程。

          當后臺進程執行失敗后負責清理數據庫緩存和閑置資源,是Oracle的自動維護機制。

          用途如下:

          用于記錄數據庫的改變和記錄數據庫被改變之前的原始狀態,當滿足以下條件時,激活LGWR:

          2) 非核心進程

          是可選的后臺進程,當數據庫處于模式時,自動歸檔redo log,并保存數據庫的所有修改記錄。

          SGA(System Global Area)和后臺進程組成。

          4、存儲結構

          存儲結構可從物理結構和邏輯結構兩方面理解。

          1) 物理結構

          物理結構:是在操作系統中的文件集合,即:磁盤上的物理文件,主要由數據文件、控制文件、重做日志文件、歸檔日志文件、參數文件、口令文件組成。

          數據文件、重做日志文件、控制文件、跟蹤文件、警告文件屬于數據庫文件

          數據文件是數據的存儲倉庫,數據被使用時才被調入內存中的。

          重做日志文件包含對數據庫所做的更改操作記錄,在Oracle發生故障時能夠恢復數據。

          控制文件包含維護和驗證數據庫完整性的必要的信息。例如,控制文件用于識別數據文件和重做日志文件,一個數據庫至少需要一個控制文件。

          在 中運行的每一個后臺進程都有一個跟蹤文件(trace file)與之相連。Trace file記載后臺進程所遇到的重大事件的信息。

          是一種特殊的跟蹤文件,每個數據庫都有一個跟蹤文件,同步記載數據庫的消息和錯誤。

          參數文件、口令文件、歸檔文件屬于非數據庫文件。

          實例參數文件,當啟動oracle實例時,SGA結構會根據此參數文件的設置內存,后臺進程會據此啟動。

          用戶通過提交/來建立會話,Oracle根據存儲在數據字典的用戶定義對用戶名和口令進行驗證。

          是重做日志文件的脫機副本,這些副本可能對于從介質失敗中進行恢復很必要。

          2) 邏輯結構

          用于存儲數據庫對象的邏輯空間,是信息存儲的最大邏輯單位,是一系列數據文件的集合。一個數據庫可以由多個表空間組成,每個表空間包括多個段。

          是對象在數據庫中占用的空間。段是區的集合

          是為數據一次性預留的一個較大的存儲空間,區是塊的集合

          ORACLE最基本的存儲單位,在建立數據庫的時候指定,并被映射到磁盤塊。

          3) 邏輯空間到物理空間的映射

          數據庫概念結構的設計步驟_數據庫概念結構設計步驟_數據庫概念結構設計步驟

          (二) Oracle RDBMS的運行過程

          1. User訪問Oracle Server之前提交一個請求(包含了db_name、、、等信息);

          2. Oracle Server接收到請求并通過 File的驗證后,分配SGA內存池,啟動后臺進程同時創建并啟動實例;

          3. 啟動實例之后,User Process與Server Process建立Connect;

          4. Server process和Oracle 建立,隨后接收用戶請求,執行相關操作;

          (三) 寫SQL語句的執行過程

          1. 用戶執行SQL語句,Server process收到后,將SQL語句送到,再將SQL語句載入數據庫緩沖區。

          2. Server Process通知Oracle 將與SQL語句相關的數據塊副本加載到緩沖區中。

          3. 在數據庫緩存區執行SQL語句,修改數據文件副本,形成“臟緩沖區”

          4. CKPT檢查到”臟緩沖區”,調用DBWn數據庫寫進程,

          5. 在DBWn運行之前,先運行了LGWR,將數據文件的原始狀態和數據庫的改變記錄到Redo Log Files

          6. 運行DBWn,將“臟緩沖區的內容寫入到數據文件”

          7. 同時CKPT修改控制文件和數據文件頭

          8. SMON回收不必要的空閑資源

          9. 返回結果給用戶

          (四) Oracle的高可用性架構

          數據庫概念結構的設計步驟_數據庫概念結構設計步驟_數據庫概念結構設計步驟

          1. Oracle RAC(Real )

          RAC 是 Oracle 數據庫的一個群集解決方案,包括計算層和存儲層。如下圖所示:

          數據庫概念結構設計步驟_數據庫概念結構的設計步驟_數據庫概念結構設計步驟

          1) 存儲層——共享存儲

          Oracle RAC的核心是共享磁盤子系統,集群中所有節點必須能夠訪問所有數據文件、重做日志文件、控制文件和參數文件,因此,這些文件必須存放在共享存儲中。常用的共享存儲方式有OCFS、OCFS2、RAW、NFS、ASM 等。說明如下:

          OCFS(Oracle Cluster File System) 和 OCFS2 都是文件系統,和 NFS 一樣,提供集群環境共享存儲的文件系統。

          RAW 裸設備也是一種存儲方式。把共享存儲映射到 RAW Device,Oracle在存儲數據時,選擇 RAW device存儲即可。但相對于文件系統來說, RAW不直觀,不便于管理,而且有數量的限制,現已被OCFS取代。

          ASM 是一種數據庫存儲的方案,并不是 cluster 的方案,使用 ASM 時,還需使用OCFS/OCFS2 或RAW。

          2) 計算層

          計算層至少需要兩臺以上的服務器,在每臺服務器上安裝集群軟件和Oracle的 RAC 組件,從邏輯結構上看,每個節點都有一個獨立的實例,這些實例訪問同一個數據庫。節點之間通過集群軟件的通信層( Layer)進行通信,利用高速緩存合并技術,實現集群中各節點緩存的高速同步,使得集群中的每個實例,都保留了一份相同的數據庫 cache。從而最大限度地低降低磁盤I/O。因此,RAC有如下特點:

          2、Data Guard

          在Data Gurad 環境中,至少有兩個數據庫,一個主庫(Primary )處于Open 狀態,另一個備庫(Standby )處于standby狀態。

          備庫又分物理庫和邏輯庫。物理庫和主庫完全一樣,通過REDO應用來保持與主庫的數據一致性,支持只讀服務;邏輯庫通過SQL應用,在備庫端執行和主庫同樣的SQL語句,以此來保持與主庫的數據一致,因此文件的物理結構(甚至數據的邏輯結構)都可以與主庫不一致。邏輯庫支持讀寫服務。

          Data Guard適合多機房方案,實際部署時,主庫部署在主機房,備庫部署在其他機房。

          二、 MySQL

          (一) MySQL架構

          數據庫概念結構設計步驟_數據庫概念結構設計步驟_數據庫概念結構的設計步驟

          1、連接器()

          MySQL向外提供的接口,如java,.net,php等語言可以通過該組件來操作SQL語句,實現與SQL的交互。

          2、管理服務組件和工具組件( Service & )

          提供對MySQL的集成管理,如備份(Backup),恢復(),安全管理()等

          3、連接池組件( Pool)

          負責監聽對客戶端向MySQL Server端的各種請求,接收請求,轉發請求到目標模塊。每個成功連接MySQL Server的客戶請求都會被創建或分配一個線程,該線程負責客戶端與MySQL Server端的通信,接收客戶端發送的命令,傳遞服務端的結果信息等。

          4、SQL接口組件(SQL )

          接收用戶SQL命令,如DML,DDL和存儲過程等,并將最終結果返回給用戶。

          5、查詢分析器組件(Parser)

          首先分析SQL命令語法的合法性,并嘗試將SQL命令分解成數據結構,若分解失敗,則提示SQL語句不合理。

          6、優化器組件()

          對SQL命令按照標準流程進行優化分析。

          7、緩存主件(Caches & Buffers)

          緩存和緩沖組件

          8、MySQL存儲引擎

          MySQL屬于關系型數據庫,而關系型數據庫的存儲是以表的形式進行的,對于表的創建,數據的存儲,檢索,更新等都是由MySQL存儲引擎完成的。

          因MySQL的開源性,允許第三方基于MySQL骨架,開發適合自己業務需求的存儲引擎。因此,MySQL支持的存儲引擎種類較多,可以分為官方存儲引擎和第三方存儲引擎。

          當前,MySQL的存儲引擎有MyISAM、InnoDB、NDB、Archive、、Memory、Merge、Parter、、Custom等。其中,比較常用的存儲引擎包括InnoDB、MyISAM和Momery。

          9、物理文件(File System)

          實際存儲MySQL數據庫文件和一些日志文件等的系統,如Linux,Unix,Windows等。

          (二) 一個查詢流程圖

          數據庫概念結構設計步驟_數據庫概念結構的設計步驟_數據庫概念結構設計步驟

          (三) MySQL的高可用架構

          因MySQL的開源屬性,其高可用架構非常靈活,目前常用的主要有以下幾種:

          1、主從復制模式

          這是MySQL自身提供的一種高可用解決方案,數據同步方法采用的是MySQL 技術。為了達到更高的可用性,在實際的應用環境中,需要配合高可用集群軟件來實現自動,否則,需要手工切換。

          數據庫概念結構設計步驟_數據庫概念結構的設計步驟_數據庫概念結構設計步驟

          2、MHA(Master High )

          MHA是相對成熟的高可用解決方案,該軟件由兩部分組成:MHA Manager(管理節點)和MHA Node(數據節點)。搭建MHA時,要求一個集群必須最少有三臺數據庫服務器,一主二從(即一臺master,一臺備用master,另外一臺slave)。

          MHA Manager可以單獨部署在一臺獨立的機器上管理多個master-slave集群,或部署在一臺slave節點上,MHA Node運行在每臺MySQL服務器上。

          運行時,MHA Manager會定時探測集群中的master節點,當master故障時,會自動將最新數據的slave提升為新的master,然后將其他所有slave重新指向新的master。整個故障轉移過程對應用程序完全透明。整個切換過程如下:

          3、MGR(MySQL Group )

          MGR是MySQL官方推薦的另一種高可用架構,復制組間的數據同步基于Paxos協議。

          當客戶端發起更新事務時,該事務先在本地執行,執行完成之后就要發起對事務的提交操作。在還沒有真正提交之前,需要將產生的復制寫集廣播出去,復制到其它成員。如果沖突檢測成功,組內決定該事務可以提交,其它成員可以應用,否則就回滾。

          數據庫概念結構的設計步驟_數據庫概念結構設計步驟_數據庫概念結構設計步驟

          組復制可以在兩種模式下運行:

          三、

          (一) 的體系架構

          使用C/S模式提供服務。客戶端和服務器可以在不同的主機上,通過TCP/IP進行網絡連接,架構如下:

          數據庫概念結構的設計步驟_數據庫概念結構設計步驟_數據庫概念結構設計步驟

          1、主進程(常駐進程)

          主進程是啟動時,第一個啟動的進程。啟動時,他會執行恢復、初始化共享內存,啟動后臺進程。當有客戶端發起鏈接請求時,會生成子進程,同時創建后端進程。

          是整個數據庫實例的總控進程,負責啟動和關閉該數據庫實例。

          數據庫概念結構設計步驟_數據庫概念結構設計步驟_數據庫概念結構的設計步驟

          2、(子進程),子進程

          接受前端請求,對數據庫進行檢索,最后返回結果。如請求是對數據庫進行更新,會先記錄日志(稱為WAL日志),以便宕機重啟時的數據恢復。另外,日志會定期歸檔保存,以便需要時進行數據恢復。

          3、后臺進程( Process)

          4、共享內存和本地內存

          示意圖如下:

          數據庫概念結構設計步驟_數據庫概念結構設計步驟_數據庫概念結構的設計步驟

          啟動后,會生成一塊共享內存,用于做數據塊的緩沖區,以便提高讀寫性能。WAL日志緩沖區和Clog緩沖區也存在共享內存中,除此之外還有全局信息比如進程、鎖、全局統計等信息也保存在共享內存中。

          數據緩沖區通過BgWrite進程,定期將數據寫入數據文件。WAL緩沖區通過進程寫入WAL文件,并通過PgArch定期進行歸檔,寫入歸檔日志

          非全局存儲的數據都存在本地內存中,主要包括:

          (二) 數據結構

          1. 數據庫相關概念:

          數據庫概念結構設計步驟_數據庫概念結構設計步驟_數據庫概念結構的設計步驟

          由一系列數據庫組成。一套程序稱之為一個數據庫群集。

          當initdb()命令執行后, , , 和數據庫被創建。

          和數據庫是創建用戶數據庫時使用的模版數據庫,他們包含系統元數據表。

          initdb()剛完成后,和數據庫中的表是一樣的。但是數據庫可以根據用戶需要創建對象。

          用戶數據庫是通過克隆數據庫來創建的;

          2. 表空間相關概念:

          initdb()后,創建和表空間。

          建表時如果沒有指定特定的表空間,表默認被存在表空間中。

          用于管理整個數據庫集群的表默認被存儲在表空間中。

          表空間的物理位置為$目錄。

          表空間的物理位置為$目錄。

          一個表空間可以被多個數據庫同時使用。此時,每一個數據庫都會在表空間路徑下創建為一個新的子路徑。

          創建一個用戶表空間會在$目錄下面創建一個軟連接,連接到表空間制定的目錄位置。

          3. 表相關概念:

          每個表有三個數據文件:

          一個文件用于存儲數據(文件名是表的OID);

          一個文件用于管理表的空閑空間(文件名是OID_fsm)。

          一個文件用于管理表的塊是否可見(文件名是OID_vm)。

          索引沒有_vm文件,只有OID和OID_fsm兩個文件

          (三) 后端進程的處理流程

          接收前端發送過來的查詢(SQL文)

          構文解析。將SQL文(單純的文字)轉換成構文樹parser tree。

          構文樹解析完以后,換為查詢樹。這時會訪問數據庫,檢查表是否存在,如果存在的話,則把表名轉換為OID。這個處理稱為分析處理(Analyze)。

          因還通過查詢語句的重寫實現視圖(view)和規則(rule),所以需要時,此階段會對查詢語句進行重寫。

          解析查詢樹后,可生成計劃樹。

          按照執行計劃里面的步驟可以完成查詢要達到的目的。

          執行結果返回給前端。

          返回到步驟一重復執行。

          四、 國產關系型數據庫

          國產關系型數據庫較多,此處以GaussDB T為例

          (一) GaussDB T架構

          1. 內存結構

          內存結構分為4部分,如下圖:

          數據庫概念結構的設計步驟_數據庫概念結構設計步驟_數據庫概念結構設計步驟

          :包括TCP LSNR和IPC LSNR,用于偵聽用戶的連接請求

          Agent Pool:代理的連接池

          SGA:

          2、存儲結構

          數據以文件方式存儲,主要有三種文件:

          DATA FILE,數據文件,用于存放各種數據,單庫最多1024個數據文件,每個數據文件最大8T(undo除外,undo最大32G)

          LOG FILE,日志文件,用于存放redo日志,可以重復使用,最少3組,每個redo 日志文件一般建議5-20G

          CONTROL FILE,控制文件,用于數據庫名、數據文件位置等信息,在數據庫啟動到mount階段時會檢查。

          (二) GaussDB T關鍵技術

          數據庫概念結構的設計步驟_數據庫概念結構設計步驟_數據庫概念結構設計步驟

          當進行事務提交時,必須先將Redo log刷盤。

          臟頁數據刷盤后,可用Redo日志可回收。

          如果數據未刷盤前掉電,加電后需要重做Redo,保持數據的一致性。

          臟頁隊列:臟頁按時序組成鏈表,即臟頁隊列,按該隊列順序分組刷盤;

          任務調度:后臺服務線程通過定時、臟頁量、RedoLog滿,三個策略滿足之一會觸發刷盤操作;

          Redo 任務調度:Redo后臺服務線程通過定時、Redo buffer量、事務提交滿足之一時會觸發Redo Log Buffer刷盤操作;

          鏡像頁機制:刷盤時間相對較長,為避免I/O阻塞,通過一個鏡像頁面緩存來完成刷盤。

          采用MVCC機制提高事務并發能力。

          (三) GaussDB T的高可用部署模式

          1、單機和主備部署模式

          數據庫概念結構的設計步驟_數據庫概念結構設計步驟_數據庫概念結構設計步驟

          2、分布式部署模式

          數據庫概念結構的設計步驟_數據庫概念結構設計步驟_數據庫概念結構設計步驟

          (四) 典型的分布式部署架構

          數據庫概念結構設計步驟_數據庫概念結構的設計步驟_數據庫概念結構設計步驟

          各組件說明如下:

          OM( Manager):運維管理模塊。提供集群日常運維、配置管理的管理接口、工具。

          CM(Cluster Manager):集群管理模塊。管理和監控分布式系統中各個功能單元和物理資源的運行情況,確保整個系統的穩定運行。

          CN( Node):協同調度節點。負責接收來自應用的訪問請求,并向客戶端返回執行結果;負責分解任務,并調度任務分片在各DN上并行執行。集群中,CN有多個且CN的角色是平等的。

          DN():數據節點。負責存儲業務數據,執行數據查詢任務以及向CN返回執行結果。在集群中,DN有多個。每個DN支持設置多個存儲備機。

          GTS(Global Time Server):全局時鐘服務器。用于強一致場景下,為各個節點提供邏輯時鐘。

          五、 主流關系型數據庫特點分析

          數據庫概念結構的設計步驟_數據庫概念結構設計步驟_數據庫概念結構設計步驟

          原題:常用(閉源、開源)關系型數據庫的分析與比較


          主站蜘蛛池模板: 中文人妻无码一区二区三区| 四虎在线观看一区二区| 一区二区免费国产在线观看| 久久精品国内一区二区三区| 国产成人亚洲综合一区| 国产日韩综合一区二区性色AV| 亚洲一区二区三区91| 国产成人久久精品区一区二区| 国产电影一区二区| 国产精品无码一区二区三区不卡| 亚洲色精品VR一区区三区| 加勒比无码一区二区三区| 国产精品无码一区二区三区免费 | 中文字幕一区二区三区精华液| 亚洲毛片不卡av在线播放一区| 久久久久久一区国产精品| 人妻少妇一区二区三区| 无码日韩精品一区二区三区免费 | 精品一区二区三区在线视频观看 | 精品国产毛片一区二区无码 | 老熟妇高潮一区二区三区| 日韩aⅴ人妻无码一区二区| 精品女同一区二区三区免费播放| 国产精品第一区第27页| 亚洲bt加勒比一区二区| 亚洲综合无码一区二区痴汉 | 国产精品福利区一区二区三区四区 | 免费高清av一区二区三区| 一区二区三区日本电影| 无码少妇一区二区三区浪潮AV| 亚洲av色香蕉一区二区三区| 一区国严二区亚洲三区| 久久精品视频一区| 日韩美一区二区三区| 国产天堂一区二区综合| 精品亚洲AV无码一区二区三区| 国产一区二区三区手机在线观看| 国产精品亚洲一区二区三区在线| 亚洲综合无码一区二区痴汉| 中日韩一区二区三区| 亚洲国产一区二区三区在线观看|