官术网_书友最值得收藏!

1.2 操作型系統與分析型系統

上一小節已經多次提及操作型系統和分析型系統,本小節將詳細闡述它們的概念及差異。

在一個大組織中,往往都有兩種類型的系統,操作型和分析型,而這兩種系統大都以數據庫作為數據管理、組織和操作的工具。操作型系統完成組織的核心業務,例如下訂單、更新庫存、記錄支付信息等。這些系統是事務型的,核心目標是盡可能快地處理事務,同時維護數據的一致性和完整性。而分析型系統的主要作用是通過數據分析評估組織的業務經營狀況,并進一步輔助決策。

1.2.1 操作型系統

相信從事過IT或相關工作的讀者對操作型系統都不會感到陌生。幾乎所有的互聯網線上系統、MIS、OA等都屬于這類系統的應用。操作型系統是一類專門用于管理面向事務的應用的信息系統。“事務”一詞在這里存在一些歧義,有些人理解事務是一個計算機或數據庫的術語,另一些人所理解的事務是指業務或商業交易,這里使用前一種語義。那么什么是數據庫技術中的事務呢?這是首先需要明確的概念。

事務是工作于數據庫管理系統(或類似系統)中的一個邏輯單元,該邏輯單元中的操作被以一種獨立于其他事務的可靠方式所處理。事務一般代表著數據改變,它提供“all-or-nothing”操作,就是說事務中的一系列操作要么完全執行,要么完全不執行。在數據庫中使用事務主要出于兩個目的:

(1)保證工作單元的可靠性。當數據庫系統異常宕機時,其中執行的操作或者已經完成或者只有部分完成,很多沒有完成的操作此時處于一種模糊狀態。在這種情況下,數據庫系統必須能夠恢復到數據一致的正常狀態。

(2)提供并發訪問數據庫的多個程序間的隔離。如果沒有這種隔離,程序得到的結果很可能是錯誤的。

根據事務的定義,引申出事務具有原子性、一致性、隔離性、持久性的特點,也就是數據庫領域中常說的事務的ACID特性。

● 原子性

指的是事務中的一系列操作或全執行或不執行,這些操作是不可再分的。原子性可以防止數據被部分修改。銀行賬號間轉賬是一個事務原子性的例子。簡單地說,從A賬號向B賬號轉賬有兩步操作:A賬號提取,B賬號存入。這兩個操作以原子性事務執行,使數據庫保持一致的狀態,即使這兩個操作的任何一步失敗了,總的金額數不會減少也不會增加。

● 一致性

數據庫系統中的一致性是指任何數據庫事務只能以允許的方式修改數據。任何數據庫寫操作必須遵循既有的規則,包括約束、級聯、觸發器以及它們的任意組合。一致性并不保證應用程序邏輯的正確性,但它能夠保證不會因為程序錯誤而使數據庫產生違反規則的結果。

● 隔離性

在數據庫系統中,隔離性決定了其他用戶所能看到的事務完整性程度。例如,一個用戶正在生成一個采購訂單,并且已經生成了訂單主記錄,但還沒有生成訂單條目明細記錄。此時訂單主記錄能否被其他并發用戶看到呢?這就是由隔離級別決定的。數據庫系統中,按照由低到高一般有讀非提交、讀提交、可重復讀、串行化等幾種隔離級。數據庫系統并不一定實現所有的隔離級別,如Oracle數據庫只實現了讀提交和串行化,而MySQL數據庫則提供這全部四種隔離級別。

隔離級越低,多用戶同時訪問數據的能力越高,但同時也會增加臟讀、丟失更新等并發操作的負面影響。相反,高隔離級降低了并發影響,但需要使用更多的系統資源,也增加了事務被阻塞的可能性。

● 持久性

數據庫系統的持久性保證已經提交的事務是永久保存的。例如,如果一個機票預訂報告顯示一個座位已經訂出,那么即使系統崩潰,被訂了的座位也會一直保持被訂出的狀態。持久性可以通過在事務提交時將事務日志刷新至永久性存儲介質來實現。

了解了事務的基本概念后,我們再來看操作型系統就比較容易理解了。操作型系統通常是高并發、高吞吐量的系統,具有大量檢索、插入、更新操作,事務數量大,但每個事務影響的數據量相對較小。這樣的系統很適合在線應用,這些應用有成千上萬用戶在同時使用,并要求能夠立即響應用戶請求。操作型系統常被整合到面向服務的架構(SOA)和Web服務里。對操作型系統應用的主要要求是高可用、高速度、高并發、可恢復和保證數據一致性,在各種互聯網應用層出不窮的今天,這些系統要求是顯而易見的。

1.操作型系統的數據庫操作

在數據庫使用上,操作型系統常用的操作是增、改、查,并且通常是插入與更新密集型的,同時會對數據庫進行大量并發查詢,而刪除操作相對較少。操作型系統一般都直接在數據庫上修改數據,沒有中間過渡區。

2.操作型系統的數據庫設計

操作型系統的特征是大量短的事務,并強調快速處理查詢。每秒事務數是操作型系統的一個有效度量指標。針對以上這些特點,數據庫設計一定要滿足系統的要求。

在數據庫邏輯設計上,操作型系統的應用數據庫大都使用規范化設計方法,通常要滿足第三范式。這是因為規范化設計能最大限度地數據冗余,因而提供更快更高效的方式執行數據庫寫操作。關于規范化設計概念及其相關內容,會在第2章“數據倉庫設計”中做詳細說明。

在數據庫物理設計上,應該依據系統所使用的數據庫管理系統的具體特點,做出相應的設計,畢竟每種數據庫管理系統在實現細節上還是存在很大差異的。下面就以Oracle數據庫為例,簡要說明在設計操作型系統數據庫時應該考慮的問題。

● 調整回滾段。回滾段是數據庫的一部分,其中記錄著最終被回滾的事務的行為。這些回滾段信息可以提供讀一致性、回滾事務和數據庫恢復。

● 合理使用聚簇。聚簇是一種數據庫模式,其中包含有共用一列或多列的多個表。數據庫中的聚簇表用于提高連接操作的性能。

● 適當調整數據塊大小。數據塊大小應該是操作系統塊大小的倍數,并且設置上限以避免不必要的I/O。

● 設置緩沖區高速緩存大小。合理的緩存大小能夠有效避免不必要的磁盤I/O。

● 動態分配表空間。

● 合理劃分數據庫分區。分區最大的作用是能在可用性和安全性維護期間保持事務處理的性能。

● SQL優化。有效利用數據庫管理系統的優化器,使用最佳的數據訪問路徑。

● 避免過度使用索引。大量的數據修改會給索引維護帶來壓力,從而對整個系統的性能產生負面影響。

以上所講的操作型系統都是以數據庫系統為核心,而數據庫系統為了保持ACID特性,本質上是單一集中式系統。在當今這個信息爆炸的時代,集中式數據庫往往已無法支撐業務的需要(從某訂票網站和某電商網站的超大瞬時并發量來看,這已是一個不爭的事實)。這就給操作型系統帶來新的挑戰。分布式事務、去中心化、CAP與最終一致性等一系列新的理論和技術為解決系統擴展問題應運而生。這是一個很大的話題,要想說清楚需要很多的擴展知識和大量篇幅,故這里只是點到為止,不做展開。

1.2.2 分析型系統

在計算機領域,分析型系統是一種快速回答多維分析查詢的實現方式。它也是更廣泛范疇的所謂商業智能的一部分(商業智能還包含數據庫、報表系統、數據挖掘、數據可視化等研究方向)。分析型系統的典型應用包括銷售業務分析報告、市場管理報告、業務過程管理(BPM)、預算和預測、金融分析報告及其類似的應用。

1.分析型系統的數據庫操作

在數據庫層面,分析型系統操作被定義成少量的事務,復雜的查詢,處理歸檔和歷史數據。這些數據很少被修改,從數據庫抽取數據是最多的操作,也是識別這種系統的關鍵特征。分析型數據庫基本上都是讀操作。

2.分析型系統的數據庫設計

分析型系統的特征是相對少量的事務,但查詢通常非常復雜并且會包含聚合計算,例如今年和去年同時期的數據對比、百分比變化趨勢等。分析型數據庫中的數據一般來自于一個企業級數據倉庫,是整合過的歷史數據。對于分析型系統,吞吐量是一個有效的性能度量指標。

在數據庫邏輯設計上,分析型數據庫使用多維數據模型,通常是設計成星型模式或雪花模式。關于多維數據模型的概念及其相關內容,會在第2章“數據倉庫設計”中做詳細說明。

在數據庫物理設計上,依然以Oracle數據庫為例,簡要說明在設計分析型系統數據庫時應該考慮的一些問題。

● 表分區。可以獨立定義表分區的物理存儲屬性,將不同分區的數據存放到多個物理文件上,這樣做一方面可以分散I/O;另一方面,當數據量非常大時,方便數據維護;再有就是利用分區消除查詢數據時,不用掃描整張表,從而提高查詢性能。

● 位圖索引。當查詢條件中包含低基數(不同值很少,例如性別)的列,尤其是包含有這些列上的or、and或not這樣的邏輯運算時,或者從有大量行的表中返回大量的行時,應考慮位圖索引。

● 物化視圖。物化視圖物理存儲查詢所定義的數據,能夠自動增量刷新數據,并且可以利用查詢重寫特性極大地提高查詢速度,是分析型系統常用的技術。

● 并行化操作。可以在查詢大量數據時執行并行化操作,這樣會導致多個服務器進程為同一個查詢語句工作,使用該查詢可以快速完成,但是會耗費更多的資源。

隨著數據的大量積累和大數據時代的到來,人們對于數據分析的依賴性越來越強,而分析型系統也隨之越來越顯示出重要性。舉一個簡單的例子,在一家醫院中,保存有20年的非常完整的病人信息。醫院領導想看到關于最常見的疾病、成功治愈率、實習醫生的實習天數等很多相關數據的詳細報告。為了滿足這個需求,應用分析型系統查詢醫院信息數據倉庫,并通過復雜查詢得到結果,然后將報告提交給領導做進一步分析。

1.2.3 操作型系統和分析型系統對比

操作型系統和分析型系統是兩種不同種類的信息系統。它們都與數據庫技術相關,數據庫提供方法支持這兩種系統的功能。操作型系統和分析型系統以完全不同的方式使用數據庫,不僅如此,分析型系統更加注重數據分析和報表,而操作型系統的目標是一個伴有大量數據改變的事務優化系統。

對于學習數據科學及其相關技術的讀者,了解這兩種信息處理方式的區別至關重要。這也是理解商業智能、數據挖掘、數據倉庫、數據模型、ETL處理和大數據等系統的基礎。

通過前面對兩種系統的描述,我們可以對比它們的很多方面。表1-1總結了兩種系統的主要區別。后面我們進一步討論每一個容易產生疑惑的對比項,以幫助你理解。

表1-1 操作型系統和分析型系統對比

首先兩種系統的側重點不同。操作型系統更適合對已有數據的更新,所以是日常處理工作或在線系統的選擇。相反,分析型系統提供在大量存儲數據上的分析能力,所以這類系統更適合報表類應用。分析型系統通常是查詢歷史數據,這有助于得到更準確的分析報告。

其次因為這兩種系統的目標完全不同,所以為了得到更好的性能,使用的數據模型和設計方法也不同。操作型系統數據庫通常使用規范化設計,為普通查詢和數據修改提供更好的性能。另一方面,分析型數據庫具有典型的數據倉庫組織形式。

基于這兩個主要的不同點,我們可以推導出兩種系統其他方面的區別。操作型系統上的查詢更小,而分析型系統上執行的查詢要復雜得多。所以操作型系統會比分析型系統快很多。

操作型系統的數據會持續更新,并且更新會立即生效。而分析型系統的數據更新,是由預定義的處理作業同時裝載大量的數據集合,并且在裝載前需要做數據轉換,因此整個數據更新過程需要很長的執行時間。

由于操作型系統要做到絕對的數據安全和可用性,所以需要實施復雜的備份系統。基本的全量備份和增量備份都是必須要做的。而分析型系統只需要偶爾執行數據備份即可,這一方面是因為這類系統一般不需要保持持續運行,另一方面數據還可以從操作型系統重復裝載。

兩種系統的空間需求顯然都依賴于它們所存儲的數據量。分析型系統要存儲大量的歷史數據,因此需要更多的存儲空間。

主站蜘蛛池模板: 东山县| 太康县| 新宾| 通化县| 梅河口市| 噶尔县| 新津县| 宁阳县| 扎鲁特旗| 子洲县| 黄冈市| 新沂市| 大冶市| 阿瓦提县| 梅州市| 霍林郭勒市| 万全县| 正安县| 文昌市| 千阳县| 竹北市| 阿勒泰市| 邹平县| 钟山县| 锡林郭勒盟| 武清区| 凉山| 蕉岭县| 莱西市| 花垣县| 富裕县| 资讯 | 临武县| 襄垣县| 潜江市| 肃宁县| 南丹县| 冕宁县| 四子王旗| 保德县| 海门市|