1. 程式人生 > 資料庫 >資料庫系統的實現和發展

資料庫系統的實現和發展

*資料庫系統的實現和現代發展*

*1資料庫系統的基本概念*

資料庫系統是資料管理的有效技術,是電腦科學的重要分支。資料庫系統是由資料庫、資料庫管理系統、應用程式和資料庫管理員組成的組織、儲存、管理、處理和維護資料的系統。

*1.1資料庫系統的發展趨勢*

資料模型是資料庫系統的核心和基礎。依據資料模型的進展,資料庫系統的發展可以相應地分為三個發展階段,即第一代的層次、網狀資料庫系統,第二代的關係資料庫系統,以及最新一代的資料庫家族。

層狀模型和網狀模型都是格式化模型,它們從體系結構到資料庫語言都具有相同的特徵,是第一代資料庫系統。支援關係資料模型的關係資料庫系統是第二代資料庫系統,對比於第一代資料庫系統,它具有模型簡單、理論基礎好、資料獨立性強以及資料庫語言非過程化等優點。第一、二代資料庫系統的資料模型雖然描述了資料的結構和某些重要的資料之間的聯絡,但是仍然不能捕捉和表達資料所具有的豐富且重要的含義。新一代資料庫系統以豐富的資料模型為基礎,與眾多領域交叉,滿足複雜的新應用的要求。

*1.2資料模型的基本概念*

資料庫技術的發展是沿著資料模型的主線推進的,現有的資料庫系統均是基於某種資料模型的,因此資料模型是資料庫系統的基礎和核心。

資料模型是嚴格定義的一組概念的集合,這些概念精準地描述了基於該資料模型的資料庫系統的靜態特性、動態特性和完整性約束條件。因此資料模型是由 資料結構、資料操作和資料完整性約束條件三個部分組成:

① 資料結構描述資料庫的組成物件以及物件之間的聯絡。

② 資料操作是指對資料庫中各種物件的例項允許執行的操作的集合,包括操作及有關的操作規則。

③ 資料完整性約束條件是一組完整性規則,完整性規則是資料庫的組成物件以及物件之間的聯絡所具有的制約和依存規則,用以限定符合資料模型的資料庫狀態以及狀態的變化,以保證資料的正確,有效和相容。

*1.3關係資料模型*

關係資料模型是最重要的一種資料模型。目前廣泛應用的資料庫系統多為關係資料庫系統,而關係資料庫系統採用關係模型作為資料的組織方式。

區別於傳統的格式化模型(層次模型和網狀模型),關係模型是建立在嚴格的數學概念的基礎上的。關係模型將關係作為其唯一的資料結構,而在使用者看來,關係其實就是一張扁平的二維表。關係模型將關係代數作為其資料操作:關係代數的運算物件是關係,其運算結果也是關係;並、交、笛卡爾積、選擇、投影是關係代數最基本的運算,構成了關係代數的最小完備集。關係模型中有三類完整性約束條件:實體完整性、參照完整性和使用者定義的完整性。其中實體完整性和參照完整性是關係模型必須滿足的完整性約束條件,被稱為關係的兩個不變性。

*2資料庫系統的實現*

資料庫系統的實現包括資料儲存、查詢處理及優化和事務管理。

*2.1資料庫系統的儲存結構和系統緩衝區*

資料庫是大量資料有結構的綜合性集合,要將這樣一個龐大的資料集以最優的形式存放在外存是一個非常重要的問題,最優體現在儲存空間耗費低並且存取效率高。資料庫的實現基礎是檔案,對資料庫的任何操作最終都要轉化為對檔案的操作,因此設計一個良好的檔案組織是資料庫實現的基本問題。資料庫系統是檔案系統的發展,檔案系統中每個檔案儲存同類實體的資料,各檔案是孤立的,沒有體現實體之間的聯絡,而資料庫系統中資料庫的儲存結構必須體現實體之間的聯絡,支援資料庫的邏輯結構,即資料模型。資料庫必須儲存兩方面的資料:

① 元資料,即資料的描述。有關資料的描述儲存在資料庫的資料字典中。在關係資料庫中,資料字典的儲存結構和資料本身的儲存結構相同。資料字典按照不同的內容分為若干張表,具體實現上,將多個數據字典表對應單個檔案,由資料庫管理系統負責儲存管理。

② 資料本身及資料之間的聯絡。資料庫中資料的儲存結構和資料之間的聯絡是緊密結合的,在資料的儲存結構中必須顯式或隱式地體現資料之間的聯絡。關係資料庫實現了資料表示的單一性:資料本身及資料之間的聯絡均用一種資料結構——“表”來表示。因此資料本身及資料之間的聯絡兩者儲存結構相同。

資料庫的系統緩衝區由記憶體組成。系統緩衝區的設立帶來了兩個優點:一是它將除外存外的其它系統成分與實際的外存隔離,外存的變更不會影響到其它系統成分;二是提高了存取效率。關係資料庫利用系統緩衝區快取資料,當用戶從資料庫讀取資料時,伺服器程序首先在系統緩衝區中搜索所需的資料,只有當系統緩衝區不存在該資料時才真正從外存讀入該資料所在的頁面;當用戶寫回資料到資料庫時,伺服器程序並不把該資料立即寫回外存,僅將該資料所在的系統緩衝區頁面作一標記,表示可以釋放,只有當該使用者事務結束或緩衝區已滿時,才按照一定的淘汰策略把系統緩衝區中有釋放標記的頁面寫回外存。採用以上策略可以減少內外存交換的次數,提高存取效率。

*2.2查詢處理和查詢優化*

查詢處理是關係資料庫管理系統執行查詢語句的過程,可以分為四個階段:查詢分析、查詢檢查、查詢優化和查詢執行。

① 查詢分析。資料庫管理系統判斷查詢語句是否符合SQL語法規則。

② 查詢檢查。資料庫管理系統根據資料字典中有關的定義檢查語句中的資料庫物件是否存在且有效,並且根據資料字典中的安全性和完整性定義檢查使用者是否有相應的許可權或是否違反了完整性約束條件。通過查詢檢查的查詢語句就已經轉換為等價的關係代數表示式。

③ 查詢優化。每個查詢都會有許多可以選擇的執行策略和操作演算法,查詢優化就是選擇一個高效的查詢執行計劃。

④ 查詢執行。資料庫管理系統根據優化器得到高效的查詢執行計劃,由程式碼生成器生成這個查詢執行計劃的程式碼,加以執行,回送查詢結果。

在四個階段中,查詢優化有著非常重要的地位,是影響關係資料庫系統性能的關鍵因素。關係資料庫系統的查詢優化不僅是關係資料庫系統實現的關鍵技術,還是其優點所在。查詢優化的優點不僅在於使用者只需提出“幹什麼”,而不必指出“怎麼幹”,而且在於系統在優化上做得更好。

查詢優化分為代數優化和物理優化。代數優化是指按照一定的規則,通過對關係代數表示式進行等價變換,改變其中的操作次序和組合,使查詢執行計劃更加高效。物理優化是指操作演算法的選擇。因為關係代數表示式根據一定的規則可以進行等價變換,所以一個關係代數表示式可以生成若干棵查詢樹,將這些查詢樹視為一個集合。代數優化的目標就是在這個查詢樹集合中選擇最優查詢樹。而物理優化的目標則是基於啟發式規則、代價計算及語義優化相結合的方式,選擇高效合理的操作演算法將代數優化得到的最優查詢樹變為具體的查詢執行計劃。

*2.3事務的基本概念*

事務是使用者定義的一個數據庫讀寫操作序列,這些讀寫操作要麼全做,要麼全不做,是一個不可分割的工作單位。事務具有四個特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持續性(Durability)。

① 原子性。事務是資料庫的邏輯工作單位。

② 一致性。事務執行的結果必須是使資料庫從一個一致性狀態到另一個一致性狀態。因此如果資料庫中事務成功提交,這時資料庫就處於一致性狀態;如果資料庫中某些事務被迫中斷,這些未完成的事務對資料庫所作的修改一部分已寫入外存,一部分未寫入外存,這時資料庫就處於不一致性狀態。可見資料庫一致性與原子性是密切相關的。之所以要以事務為邏輯工作單位,是因為單個的讀寫操作不能夠保證關聯資料的一致性,而事務包含一系列讀寫操作,這些讀寫操作要麼都做,要麼都不做,這樣就使得資料庫在事務開始時和事務提交後都處於一致性狀態。

③ 隔離性。一個事務內部使用的資料對其他併發執行的事務是隔離,這樣就保證了併發執行的事務之間互不干擾,進而保證了資料的一致性。

④ 持續性。一個事務一旦提交,其對資料庫的修改就是永久的,接下來可能發生的故障不應該對其執行結果有任何的影響。

*2.4資料庫恢復*

資料庫系統出現故障是不可避免的,所以資料庫管理系統必須具有把資料庫從錯誤狀態恢復到某一已知的一致性狀態的功能,這個功能就稱為資料庫的恢復。恢復的基本原理就是使用冗餘資料,即資料庫中不正確的資料或被破壞的任何一個部分都可以使用冗餘資料來重建。恢復技術可以簡單分為兩步:一是建立冗餘資料,二是遭遇故障時,利用這些冗餘資料進行資料庫恢復。

建立冗餘資料最常用的技術是資料轉儲和登記日誌檔案。資料轉儲就是定期將全部或部分資料庫複製到儲存介質上儲存起來的過程,這些備用的資料稱為後備副本。日誌檔案是用來記錄事務對資料庫的更新操作的檔案。為了保證資料庫的可恢復性,登記日誌檔案時必須遵循以下兩條原則:一是登記的次序嚴格按照併發事務執行的時間次序,二是必須先登記日誌檔案,後更新資料庫:如果先更新資料庫,再登記日誌檔案,則恢復時就無法將資料庫恢復到更新前的狀態,這樣就會破壞資料庫的一致性;而如果先登記日誌檔案,再更新資料庫,則恢復時只不過是多執行一次沒有必要的撤銷操作,並不會影響資料庫的一致性。

在發生軟體故障後,資料庫處於不一致狀態,資料庫管理系統採用的恢復步驟是:正向掃描日誌檔案,找出在故障發生前已經提交的的事務,對其進行重做操作;找出故障發生時尚未完成的事務,對其進行撤銷操作。而在發生硬體故障後,資料庫本身被破壞,資料庫管理系統採用的恢復步驟是:首先裝入最新的資料庫後備副本,使資料庫恢復到最近一次轉儲時的一致性狀態,然後裝入相應的日誌檔案,重做故障發生前已經提交的事務,撤銷故障發生時尚未完成的事務。從上述的恢復步驟中,我們可以看到使用日誌檔案進行恢復時必須搜尋整個日誌檔案,而且很多已提交的事務實際上已經寫入外存,恢復時又重新執行了重複的操作,這樣就造成了大量的時間浪費。為了解決這些問題,目前技術將一般的日誌檔案發展為具有檢查點的日誌檔案。這種技術在日誌檔案中增加了一類新的記錄,即檢查點記錄,保證在檢查點之前的已完成事務已經寫入外存。這樣在恢復時,就無需搜尋整個日誌檔案以及進行不必要的重複操作,提高了恢復效率。

*2.5併發控制*

事務是併發控制的基本單位,為了保證事務的隔離性進而保證事務的一致性,資料庫管理系統必須要進行正確的併發排程。要進行正確的併發排程首先要明確什麼樣的併發排程是正確的排程:一個給定的併發排程,當且僅當它是可序列化的,才認為其是正確的排程。然而判斷一個併發排程是否是一個可序列化排程是一個NPHard問題,所以我們退而求其次,判斷一個併發排程是否是一個衝突可序列化排程,其中衝突可序列化排程是可序列化排程的子集。一個併發排程Sc1在保證兩個事務衝突操作的次序不變的情況下,通過交換兩個事務不衝突操作的次序得到另一個排程Sc2,如果Sc2是序列的,則稱Sc1為衝突可序列化的排程,其中衝突操作是指兩個事務對同一資料的讀寫操作和寫寫操作,其餘操作是不衝突操作。

由事務的原子性和一致性可知,在事務開始時和事務提交後資料庫一定處於一致性狀態。但是在事務內部正在使用的資料不能保證其一致性,所以應通過加鎖的方式使事務內部正在使用的資料對其它併發執行的事務是隔離的,從而保證了資料的一致性。而為了保證併發排程的正確性,目前技術普遍採用兩段鎖協議。所謂兩段鎖的含義是,事務分為兩個階段,第一階段是獲得封鎖,事務可以申請獲得任何資料上的任何型別的鎖,但是不能釋放任何鎖;第二階段是釋放封鎖,事務可以釋放任何資料上的任何型別的鎖,但是不能再申請任何鎖。如果一個併發排程遵守兩段鎖協議,那麼它一定是一個可序列化的排程,即正確的排程。

*3資料庫系統的現代發展*

新一代資料庫系統以豐富的資料模型為基礎,與眾多領域交叉,滿足複雜的新應用的要求。資料庫技術與網路技術相結合,出現了Web資料庫,進而發展了語義網技術;資料庫技術與人工智慧技術相結合,出現了演繹資料庫和知識圖譜;資料庫技術與大資料技術相結合,出現了分散式、面向列族的NoSQL資料庫Hbase;資料庫技術與分佈處理技術相結合,出現了分散式資料庫系統,進而發展了區塊鏈技術。資料庫系統在科學技術高速發展的今天,仍然熠熠生輝,散發出生機勃勃的活力。

*3.1資料庫技術在網路中的應用*

當前網際網路已經成為人們獲取和釋出資訊的重要平臺,面對來自不同資訊域的巨量資料,如何進行實時處理、高效資訊融合與共享,如何滿足不同使用者快速查詢資訊並有效維護資訊的需求,這些問題對現有的技術提出了很多挑戰。

解決上述問題一種行之有效的技術是語義網(Semantic Web),而要理解語義網必須要先理解語義網的基石:RDF。RDF(Resource Description Framework),即資源描述框架,其本質是一個數據模型。它提供了一個統一的標準,用於描述實體。RDF形式上表示為SPO三元組(Subject-Predicate-Object),具體來說RDF由節點和邊組成,節點表示實體和屬性,邊則表示實體和實體之間以及實體和屬性之間的關係。

如果將RDF和XML結合,就建立了描述層的格式與語法環境,但是這並不能賦予資料以語義,即資料的含義和各種資料之間的聯絡。而語義網正是為了使得網路上的資料變得機器可讀而提出的一個通用框架。“Semantic”就是用更豐富的方式來表達資料背後的含義,讓機器能夠理解資料;“Web”則是希望這些資料相互連結,組成一個龐大的資訊網路,正如網際網路中相互連結的網頁,只不過基本單位變為粒度更小的資料。在語義網的實現中,元資料管理作為最關鍵的一部分,應具備較強的計算與協作能力,可以獲得與其它語義環境下的資源互動而必需的資訊支援。為了能夠更好地表述語義網元資料,我們可以將本體技術引入到元資料管理中來。本體(Ontology)概念源自於哲學領域,是用形式化的方法來表達某一領域的概念、概念之間的關係以及概念和關係的屬性定義,使得這些概念既可以被機器所理解,也能夠被廣大使用者所共享。

*3.2資料庫技術在人工智慧中的應用*

知識圖譜(Knowledge Graph)最先由谷歌公司提出,其開發了基於知識圖譜的專案並將知識圖譜應用在語義搜尋方面,通過構建起來的知識圖譜可以精準的搜尋出需要的資訊。

事實上,知識圖譜與語義網有著千絲萬縷的聯絡:知識圖譜是由本體作為Schema層,和RDF資料模型相容的結構化資料集。知識圖譜同樣以RDF為基石,而RDF的表達能力有限,無法區分類和物件,也無法定義和描述類的關係/屬性,也就是說RDF是對具體事物的描述,缺乏抽象能力,無法對同一個類別的事物進行定義和描述。不論是在智慧的概念上,還是在現實的應用當中,這種泛化抽象能力都是相當重要的;同時,這種能力也是知識圖譜本身十分強調的。因此我們引入模式語言/本體語言(Schema/Ontology Language)來解決RDF表達能力有限的困境。模式語言/本體語言是用來描述RDF資料的,類比於關係資料庫:在關係資料庫中,一個模式(Schema)通常包括多個表。我們可以認為資料庫中的每一張表都是一個類,表中的每一行都是該類的一個物件,表中的每一列就是這個類所包含的屬性。模式語言/本體語言與關係資料庫中的模式十分類似,即模式語言/本體語言本質上是一些預定義詞彙構成的集合,用於對RDF進行類似的類和物件定義及其屬性的定義。

基於深度學習的知識圖譜的構建是將某一領域的資料資訊通過深度學習演算法構建“實體—關係—實體”的三元組模型,並將其儲存在圖結構資料庫中。知識圖譜的構建主要分為兩大資料採集與資料處理兩部分。資料採集是指選擇構建知識圖譜的“原材料”,基於深度學習的知識圖譜需要大量的訓練資料進行模型訓練,因此資料採集是知識圖譜的重要的構建步驟。資料處理是指標對採集的資料進行相關演算法操作,完成相應的任務。在通過一系列演算法實現對非結構化資料進行命名實體識別(NER)和關係抽取(RC)之後,將其儲存在資料庫中。通常使用的資料庫為關係資料庫,但是關係資料庫無法直接處理具有關係類別的資料,若要表達不同資料之間的關係需要構建外碼,並通過引用方式進行關聯,這就涉及到眾多連線操作,對於百萬級別資料來說,會嚴重影響到查詢速度以及後期的資料更新與維護,因此需要一個能夠體現不同實體的關係的資料庫,即圖結構資料庫。

圖資料庫本身屬於NoSQL資料庫中的一種,是基於數學中圖論實現的一種資料庫。不同於關係資料庫將資料存在表字段中,圖資料庫將資料和資料之間的關係存在結點和邊中,在圖資料庫中這被稱作結點和連線結點的關係。圖資料庫對資料的抽象方式和關係資料庫十分類似,每個結點記錄一系列描述該結點特性的屬性,但在表示關係的時候,圖資料庫就和關係資料庫有很大的不同了:相對於關係資料庫中的通過外碼相互引用的各種關聯表,圖資料庫中的關係可以通過關係能夠包含屬性這一功能來提供更為豐富的展現方式。因此在表示知識圖譜中“實體—關係—實體”的三元組模型時,圖資料庫較傳統的關係資料庫更為適合。

*3.3資料庫技術在區塊鏈中的應用*

區塊鏈(blockchain)是藉由串接並保護內容的區塊,每一個區塊包含了前一個區塊的、相應時間戳記以及交易資料,總的來說,區塊鏈是一個去中心化的分散式資料庫。

區塊鏈系統,首先是一個分散式系統。從傳統的集中式單節點結構,演變到分散式多節點結構,要解決的首要問題就是一致性的保障。在分散式系統中,執行著多個相互關聯的服務節點,因此不同於集中式單節點結構所體現的一致性,分散式多節點結構的一致性有著不同的含義。在分散式系統中,一致性是指叢集中的多個服務節點,給定一系列的操作,在約定協議的保障下,使它們對外界呈現的狀態是一致的,換句話說,也就是保證叢集中所有服務節點中的資料完全相同並且能夠對某個提案達成一致。在分散式系統中,要達成一致性必須滿足以下要求:首先,達成一致的結果在有限的時間內完成,即有限性;其次,不同節點最終完成的結果是相同的,即約同性;最後,決策的結果必須是系統中某個節點提出來的,即合法性,也就是說,在分散式系統中,如果一個由節點提出的提案,能夠用在有限的時間內,達到一致性的結果,我們就說該提案達到了一致性。

區塊鏈系統還必須是去中心化的,去中心化的意思就是網路中的節點與節點之間相互信任,去除了常見分散式系統中的中心繫統的概念。在一個去中心化的分散式系統中,由於去除了中心繫統,資料的一致性又蛻變為共識性:一致性指分散式系統中多個副本對外呈現的資料的狀態,而共識性則描述了分散式系統中多個節點之間,彼此對某個狀態達成一致結果的過程,即一致性描述的是結果狀態,而共識則是一種手段。具體來講,要保障系統滿足不同程度的一致性,核心過程往往需要通過共識演算法來達成。最常用的共識演算法當屬基於概率統計的工作證明(PoW)演算法,工作證明演算法使得每個節點在傳遞資訊之前要先對其進行工作證明,降低了資訊傳遞的速率,增加了節點成為領導的難度,通過區塊鏈的短暫分叉,完美地解決了拜占庭將軍問題。對於基於概率統計的工作證明演算法,共識結果則是臨時的,隨著時間推移或某種強化,共識結果被推翻的概率越來越小,成為事實上的最終結果。

去中心化和共識是兩個相輔相成的概念,兩者結合才是真正意義上的“去中心化”。去中心化有了共識,才具備了完全的可信度,否則僅僅是資料共享,無法確認這些共享的資料是否真實;共識有了去中心化,就具備了安全性,系統很難被攻破,資訊也很難被篡改;再加上特殊的資料結構,整個的實現就是區塊鏈。