跳轉到內容

Oracle 和 DB2,比較與相容性/架構/概述

來自 Wikibooks,開放世界中的開放書籍

一般來說,關係型資料庫(DBMS)看起來像這樣

通用關係型資料庫結構


資料庫包含的實際資料駐留在物理介質上 - 磁碟驅動器。當需要資料時,它會被移動到共享記憶體 - RAM。當需要對這些資料執行工作時,它由作業系統處理 - 程序和執行緒。

儲存模型

[編輯 | 編輯原始碼]

由於磁碟上只發生讀取和寫入操作,因此磁碟上的資料受介質限制,但以一種利用磁碟儲存優點(位、位元組、塊、磁軌和柱面)的方式進行組織。這種物理組織由作業系統管理,對資料庫使用者來說完全是不可見的。資料庫管理員(DBA)可以指定將資料庫的不同部分放在不同的磁碟上,以及可以複製這些資料,但在最低級別上,您通常不關心資料是如何進出磁碟或如何組織的。磁碟資料的組織針對讀取和寫入進行了最佳化。話雖如此,但構成資料庫結構的各種不同資料集 - 我們認為是包含行和列的表的資料本身、這些資料的索引、日誌檔案、控制檔案、引數檔案、配置檔案和應用程式邏輯。至關重要的是,DBMS 知道這種結構,而 DBMS “看到” 它的方式是透過儲存模型。儲存模型是一個抽象層,它將簡單讀取和寫入資料的需求對映到 DBMS 的需求。雖然您不關心資料是如何讀取和寫入的,但您確實關心對使用者資料的更改不會寫入配置檔案,例如。因此,每個 DBMS 都有一個關於磁碟上不同型別資料的表示,它需要執行其工作。DBMS 的儲存模型描述了 DBMS 的物理結構(控制檔案、資料檔案、日誌檔案),這種結構被稱為資料庫。磁碟資料具有以下優點。它便宜,它實際上是無限的,最重要的是它是永續性的。

記憶體模型

[編輯 | 編輯原始碼]

對資料進行工作的場所是在記憶體中。記憶體訪問速度比磁碟快幾個數量級,並且在記憶體中可以構建的結構型別比磁碟上的結構型別限制更少 - 它們可以很複雜並且是任意的,並且可以輕鬆地修改和重組。這賦予了 DBMS 速度和靈活性。記憶體和磁碟之間存在一個共同的結構,這個基本的資訊構建塊恰如其分地被稱為塊。記憶體中的結構按塊組織,這便於將磁碟上的塊讀入記憶體。由於資料庫中的資料塊在邏輯上是相關的,因此不僅移動您需要的資料到記憶體,而且移動您可能在同一時間需要的資料是有效的。這些“預期”讀取稱為預取,由於它們可以一次獲取多個數據塊,因此這些塊在稱為範圍的結構中相互堆疊。除了儲存從磁碟檢索的資料外,記憶體還將儲存資料庫操作期間建立的瞬態結構(即中間排序表)、可執行程式碼塊、系統目錄和字典以及計劃。記憶體模型描述的記憶體結構可以快速訪問,並且包含 DBMS 操作所需的大部分資訊。這包括儲存在磁碟上的更大使用者資料部分,以及資料庫管理系統本身所需的結構(即計劃、元程式碼等)。由於可能無法或不希望將駐留在磁碟上的所有資料都放在記憶體中,並且出於安全性(永續性)原因,DBMS 將在記憶體和磁碟之間交換資料。

程序模型

[編輯 | 編輯原始碼]

DBMS 中同時發生很多事情,例如從磁碟讀取和寫入資料、在資料庫日誌中記錄恢復資訊、檢查記憶體中的資料是否已更改、儲存使用者和系統程式的連線、監控資料庫的執行狀況、執行使用者編寫的程式碼、鎖定資料庫的某些部分並檢測死鎖。這個列表絕不是詳盡無遺的,並且不同 DBMS 實現之間存在差異。

這些差異將在後面針對每個適當的資料庫進行介紹,但有一組核心程序處理記憶體管理、分頁到磁碟以及在恢復或回滾事件中寫入資訊。正是這些與記憶體中的結構協同工作被稱為例項。

程序模型實現

資料庫需要能夠為來自併發使用者的眾多請求提供服務。它們執行的作業系統使用程序和執行緒處理併發。執行緒是作業系統可以排程的最小執行單元,通常一個程序包含一個或多個執行緒。程序中的多個執行緒可以訪問相同的資源,例如記憶體,而包含它們的程序則不能。這在速度上具有優勢,因為執行緒可以在沒有程序間呼叫 (IPC) 開銷的情況下相互通訊。缺點是,由於執行緒可能會相互踐踏,因此它們正在處理的結構需要被鎖定,而這些鎖需要管理(這會帶來自身的開銷)。即使有了這些機制,執行緒在處理相同資料結構時仍然有可能更改資料,然後另一個執行緒將其更改回來 - 這就是所謂的“競爭條件”。這些問題極其難以隔離和重現。話雖如此,執行緒的實現方式因作業系統而異,有些作業系統在這方面做得比其他作業系統好。

在單處理器系統上,執行緒透過多路複用處理。這是處理器線上程之間切換(稱為上下文切換)的地方,當處理器正在處理執行執行緒時,其他執行緒會等待。通常情況下,處理器的執行速度遠快於各個執行緒的需求(這些執行緒可能正在等待 I/O 或使用者輸入),並且切換速度如此之快,以至於看起來每個執行緒都在同時執行。在多處理器系統上,執行緒通常會同時在不同的處理器上執行。

資料庫將對映其併發使用者需求到底層作業系統的程序和執行緒。這種對映稱為資料庫程序模型。由於資料庫的使用方式不同(單使用者與多使用者、獨立與並行),以及不同作業系統對執行緒的實現方式不同,因此 Oracle 和 DB2 允許使用者實現不同的程序模型。這是一個實現級別的決定;一旦資料庫安裝好,您選擇的程序模型就固定了。Oracle 和 DB2 將根據您的需求和作業系統指導您做出最合適的選擇。需要執行的工作單元是相同的,無論它們是作為執行緒還是程序實現的,並且令人困惑的是,術語程序模型和程序傾向於用於執行緒、使用者程序、資料庫程序和作業系統程序可互換(就像資料庫可以表示資料庫例項或磁碟上的使用者資料一樣),本書也不例外。當使用“程序”一詞時,它表示所有三種(資料庫程序、作業系統程序和使用者程序)以及執行緒正在完成的工作。當我們想要描述資料庫需要執行的工作單元時,這是一個方便使用的術語,而底層實現不是一個考慮因素(抽象,如果你願意)。在必須區分程序型別和程序與執行緒的地方,這種差異將是具體的(即,檢查點是一個程序與檢查點是一個帶執行緒的資料庫程序)。雖然這可能看起來有點迂腐,但這是一個重要的區別,因為在實現資料庫相容性時需要考慮這一點。

Oracle 和 DB2 預設情況下都透過程序支援每個併發使用者。

對於具有大量併發使用者的系統,Oracle 建議將使用者多路複用到程序池中。如果作業系統具有良好的執行緒實現,DB2 將為每個使用者使用這些作業系統執行緒。

磁碟上的結構構成資料庫,記憶體中的結構和程序構成資料庫例項,資料庫例項和資料庫一起被稱為資料庫伺服器。

華夏公益教科書