跳轉到內容

主記憶體資料庫系統設計/介紹

來自華夏公益教科書,開放書籍,開放世界

第一部分:資料庫和資料庫管理系統簡介


目錄上一頁: 前言下一頁: DBMS 簡介


第一章:概述

1.1 簡介

[編輯 | 編輯原始碼]

資料庫系統已成為每個軟體應用程式的重要組成部分。資料庫系統誕生於 1960 年代,並花了 10 年時間才得到廣泛應用。越來越多的組織開始採用資料庫技術來管理其企業資料,這發生在 1970 年代中期。

廣義更新訪問方法 (GUAM) 是由洛克希德公司在 1960 年代初期開發的一種層次式資料庫系統。洛克希德公司開發此軟體是為了管理通常與製造操作相關聯的資料。IBM 在此之後不久就推出了資訊管理系統 (IMS) 作為一種層次式資料庫管理系統。1970 年代是關係型資料庫技術誕生的黎明。埃德加·F·科德博士關於[[w:Relational model|關係模型]]的論文徹底改變了人們對資料系統的思考方式。行業對關係模型的優越性做出了迅速反應,將他們的產品改編成該模型。在 1980 年代,資料庫系統獲得了很大的發展,大部分企業從面向檔案的系統過渡到資料庫系統。一些領先的產品,如 ORACLE、DB2、SQL Server、Informix 和 Sybase,開始憑藉其旗艦關係型資料庫管理系統 (RDBMS) 統治資料庫世界。

關係模型在 1990 年代成熟起來,成為主要的資料庫模型。在 1990 年代末,面向物件資料庫開始流行起來,但是,使用關係模型開發的舊應用程式不願遷移到面向物件模型。

2000 年代後期出現了NoSQL 運動,該運動轉向更具體的應用程式資料模型,而不是關係模型。面向物件模型是正在使用的替代資料模型之一。

大多數領先的資料庫管理系統支援面向物件模型。它們中的許多提供了物件到關係的對映,以實現面向物件模型的支援。例如,DB2 是關係型、層次型 (XML)、面向物件的資料庫管理系統。

商業 DBMS

開源 DBMS

1.2 資料庫

[編輯 | 編輯原始碼]

“資料庫”一詞是常用的。我們經常互換使用“資料庫”和“資料庫管理系統”這兩個詞,這在大多數情況下是錯誤的。因此,我們必須首先定義“資料庫”的含義。

資料庫是為特定目的而設計、構建和填充資料的相關資料的集合。

資料庫可以是任何大小,並且複雜程度不同。例如,員工姓名和地址列表可能包含幾百到幾千條記錄,具體取決於組織規模。實際上,有些資料庫儲存了更多資料,例如,稅務部門維護的資料庫,用於跟蹤所有已繳稅款。在印度,假設大約有 10 億納稅人,如果每個納稅人每張表格提交約 500 個字元的資訊,那麼我們會得到一個 10^9 * 500 = 500 吉位元組 (GB) 資料的資料庫。為了至少儲存過去三年的申報表,我們需要 1.5 太位元組 (TB) 的空間。必須組織和管理大量資訊,以便使用者可以按需搜尋和更新資料。

資料庫也可能非常複雜,因為不同記錄之間存在複雜的關係。印度鐵路預訂系統就是一個很好的例子。

1.3 資料庫管理系統

[編輯 | 編輯原始碼]

資料庫管理系統 (DBMS) 是一種通用軟體系統,它使使用者能夠定義、構建、操作和共享資訊或資料。此外,它還提供長期的資料“永續性”。儲存的資訊被稱為資料庫。

資料庫管理系統包括可以應用於資料的基本操作。每個資料庫管理系統都提供以下基本操作,統稱為 CRUD 首字母縮略詞

  • C—透過將其插入資料庫來建立資料
  • R—從資料庫中讀取資料
  • U—更新已儲存在資料庫中的資料
  • D—從資料庫中刪除資料

1.3.1 DBMS 的優點

[編輯 | 編輯原始碼]

簡單地執行 CRUD 操作不需要 DBMS。實際上,可以使用電子表格甚至編寫我們自己的程式集來簡單地建立和維護資料。但是,DBMS 軟體已經解決了在此過程中必然會出現的許多其他問題,例如

  1. 與多個使用者共享資料,並進行訪問控制
  2. 多使用者事務處理
  3. 併發處理
  4. 冗餘控制
  5. 查詢處理和最佳化
  6. 安全性
  7. 備份和恢復
  8. 完整性約束強制執行
  9. 標準強制執行
  10. 應用程式資料抽象

1.4 資料庫系統型別

[編輯 | 編輯原始碼]

資料庫軟體已經發展到支援不同型別的資料模型。當我們嘗試在資料模型中表示現實世界中的資料需求時,我們會在一段時間內提出不同的資料模型。事實證明,我們可以通過幾種不同的方式檢視資料需求並建立資料模型。它們列在下面。

1.4.1 層次式 DBMS

[編輯 | 編輯原始碼]

層次式資料庫的性質類似於檔案系統,具有根節點和一個或多個引用父節點的子節點。這提供了非常快的 資料訪問路徑,但應用程式維護量很大。

資料被組織成樹狀結構,允許使用父/子作為一對多關係來重複資訊。父節點可以有多個子節點,但子節點只有一個父節點。該模型在最初的主機資料庫管理系統中得到了廣泛應用。目前最常見的層次模型形式是 LDAP 模型。隨著最近 XML 資料庫的出現,該模型再次流行起來。

XML 資料庫是一種資料永續性軟體系統,允許以 XML 格式匯入、訪問和匯出資料。存在兩種主要型別的 XML 資料庫

  • 啟用 XML:它們將所有 XML 對映到傳統資料庫(如關係型資料庫),接受 XML 作為輸入並呈現 XML 作為輸出。
  • 原生 XML (NXD):此類資料庫的內部模型依賴於 XML,並使用 XML 文件作為基本儲存單元。

1.4.2 網狀 DBMS

[編輯 | 編輯原始碼]

該模型是層次式資料模型的擴充套件,其中每個記錄可以有多個父節點和多個子節點記錄。實際上,它支援多對多關係。它提供了靈活的方式來表示物件及其關係。但在它獲得普及之前,新的模型“關係模型”被提出,並且在提出之後就取代了網狀資料庫模型。

1.4.3 關係型 DBMS

[編輯 | 編輯原始碼]

關係模型是任何關係型資料庫管理系統 (RDBMS) 的基礎。它定義瞭如何建立、儲存和檢索資料,以及如何使資料在邏輯上保持一致。關係模型有三個核心元件:物件或關係的集合、作用於物件或關係的運算子以及資料完整性方法。

關係模型之父 E. F. Codd 博士制定了規則並提出了該模型。資料表示為數學上的 n 元關係,n 元關係是 n 個域的笛卡爾積的子集。“關係”是“表”的數學術語,因此“關係型”大致意味著“基於表”。

關係模型的基本原則是資訊原則:所有資訊都由關係中的資料值表示。根據該原則,關係資料庫是一組關係,每個查詢的結果都以關係形式呈現。

關係的基本構建塊是域或資料型別。元組是屬性值的無序集。屬性是屬性名稱和型別名稱的有序對。屬性值是屬性型別的特定有效值。它可以是標量值或更復雜型別。關係被定義為一組 n 元組。關係資料庫中的表(也稱為關係)是一個用於儲存相關資訊的二維結構。資料庫包含一個或多個相關的表。不要將關係與關係混淆。關係本質上是一個表,而關係是關聯、連線或關聯兩個表的一種方式。

表中的一行是單個事物的集合或例項,例如一個員工或發票上的一行專案。一列包含所有單一型別的資訊,而行和列交叉處的資料塊(欄位)是資料庫查詢語言可以檢索到的最小資訊塊。


關係資料庫的一致性不是透過構建到使用它的應用程式中的規則來強制執行的,而是透過作為邏輯模式的一部分宣告並在 DBMS 中對所有應用程式強制執行的約束來強制執行的。關係模型透過外部索引鍵實現的邏輯連結,建立了相關資料出現的連線。

關係模型定義了選擇、投影和連線等操作。雖然這些操作可能在特定的查詢語言中並不明確,但它們提供了構建查詢語言的基礎。

SQL 代表結構化查詢語言,它支援幾乎所有現代關係資料庫系統中的資料庫元件。SQL 已由美國國家標準協會 (ANSI) 進行了 20 多年的改進和完善。

ANSI 引入了標準查詢語言來訪問關係資料庫,即 SQL(結構化查詢語言)。所有資料庫供應商在其關係引擎之上開發了 SQL 引擎,以解釋和執行這些 SQL 語句。這也導致程式語言中出現了標準介面。用於 C 的 ODBC 和用於 JAVA 的 JDBC 成為訪問 SQL 引擎的事實標準。

本書主要關注關係型資料庫管理系統 (RDBMS),因為其他資料庫系統構建在 RDBMS 之上,而它們無法從 MMDB 的主記憶體特性中獲益。

1.4.4 主記憶體 DBMS

[edit | edit source]

記憶體資料庫系統 (IMDB) 是一種記憶體駐留關係資料庫,它透過將資料儲存和操作在主記憶體中來消除磁碟訪問。它也稱為主記憶體資料庫 (MMDB) 或即時資料庫 (RTDB)。在即時資料庫的情況下,可預測性比效能更重要。

磁碟和記憶體容量的增長速度遠遠快於延遲和頻寬的提高。現在,多 TB RAM 掃描需要幾分鐘,而 TB 磁碟掃描需要數小時。現在我們將整個資料庫儲存在記憶體中,並智慧地設計資料結構和演算法,並使用共享大量主記憶體的多處理器,並智慧地使用寶貴的磁碟頻寬。資料庫引擎需要徹底改變其演算法,以應對主記憶體容量巨大(數十億頁,數萬億位元組)這一事實。主記憶體資料庫實現已經證明,它們可以比傳統方法快 10 到 20 倍地執行查詢。主記憶體資料庫的時代終於到來了。在這本書中,我們將討論這種型別的資料庫管理系統。

1.4.5 列或垂直 DBMS

[edit | edit source]

以三元關係(鍵、屬性、值)的形式將資料儲存在列中,可以實現非凡的壓縮,通常作為點陣圖。查詢此類點陣圖可以將查詢時間減少幾個數量級,並啟用全新的最佳化策略。這是由於它執行 OLAP(聯機分析處理)查詢時執行的磁碟 I/O 總數由於資料壓縮而急劇下降。由於查詢執行時間大幅縮短,這些型別的資料庫在 OLAP 應用程式中開始流行起來。

1.4.6 流處理 DBMS

[edit | edit source]

資料越來越多地由監控環境的儀器生成——觀察天體的望遠鏡、觀察急診室病人生命體徵的病人監護儀、尋找欺詐的手機和信用卡系統以及監控產品在供應鏈中流動的 RFID 掃描器。在所有這些情況下,人們都希望將傳入資料與物件的記錄進行比較。此類流處理系統的資料結構、查詢運算子和執行環境與經典 DBMS 架構有本質區別。實質上,到達的資料項代表了對現有資料庫的相當複雜的查詢。研究人員一直在構建流處理系統,他們的流處理理念已開始出現在主流產品中。

1.4.7 物件關係型 DBMS

[edit | edit source]

物件關係型資料庫管理系統 (ORDBMS) 提供了一種關係型資料庫管理系統,允許開發人員將其資料庫與他們自己的自定義資料型別和方法整合。物件檢視允許開發人員在現有的關係資料庫表上定義面向物件的結構。這樣,現有應用程式就不需要立即更改,任何新開發都可以使用表的面向物件定義。這使得從關係型資料庫過渡到物件關係型資料庫相對容易,因為物件定義可以引用現有的關係元件。術語物件關係型資料庫有時也指在傳統 DBMS 上執行的外部軟體產品,以提供類似的功能。

1.4.8 分散式 DBMS

[edit | edit source]

分散式資料庫將分散式計算的優勢帶到資料庫管理領域。它是一組分佈在計算機網路上的多個邏輯上相互關聯的資料庫,以及管理分散式資料庫的分散式管理器軟體。它包括資料複製、資料碎片、分散式查詢處理、分散式事務處理、分散式資料庫恢復等。

本書重點介紹關係型主記憶體資料庫系統。

[edit | edit source]

對於小型個人資料庫(例如聯絡人列表),通常一個人來定義、構建和操作資料庫,並且沒有資料共享。然而,龐大而複雜的資料庫需要許多人來定義、構建、操作和維護資料庫。資料庫涉及許多角色,列舉如下:

  • 資料庫管理員負責資料庫本身、DBMS 和相關軟體。他負責授權訪問資料庫、監控資料庫使用情況以及根據需要獲取軟體和硬體資源。
  • 資料庫設計人員負責識別要儲存在資料庫中的資料,並選擇合適的結構來表示和儲存這些資料。他們與專業使用者互動,並開發滿足其應用程式要求的資料庫“檢視”。
  • 系統分析師/軟體工程師徹底瞭解 DBMS 的功能,以便實施應用程式以滿足其複雜的應用程式要求。
  • DBMS 核心開發人員是設計和實施 DBMS 介面和模組作為軟體包的人員。
  • DBMS 工具開發人員包括開發工具來訪問和使用 DBMS 軟體的人員。典型軟體包包括資料庫設計、效能監控、GUI 等。

本書主要關注執行“DBMS 核心開發人員”角色的人員。

1.6 程式設計介面

[編輯 | 編輯原始碼]

大多數資料庫系統提供互動式介面,使用者可以在其中輸入 SQL 命令,資料庫系統將檢索並顯示結果記錄。例如,在安裝了 MYSQL RDBMS 的計算機系統中,命令 mysql 將啟動互動式介面。此工具便於建立模式和執行偶爾的臨時查詢。然而,實際上大多數資料庫互動都是透過程式執行的。這些程式通常稱為資料庫應用程式。由於超過 90% 的應用程式涉及資料庫,我們可以說所有應用程式都是資料庫應用程式。

有三種方法可以以程式設計方式訪問資料庫:

  • 嵌入式 SQL - 在通用程式語言中嵌入 SQL 命令。資料庫語句嵌入到程式語言中,並由預處理器透過字首 “EXEC SQL” 進行識別。這些預處理器將這些語句轉換為 DBMS 生成的程式碼。例如,ESQL 用於 C/C++,而 SQLJ 用於 Java。
  • 原生語言驅動程式 - 位於 SQL 命令之上的標準介面。這些驅動程式提供函式來連線資料庫、執行語句、檢索結果記錄等等。ODBC 和 JDBC 就是例子。
  • 專有語言/驅動程式 - PL/SQL、PHP 驅動程式。Mysql 提供 PHP 驅動程式來訪問資料庫。

目錄上一頁: 前言下一頁: DBMS 簡介

華夏公益教科書