事务处理:概念与技术
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                事务处理:概念与技术
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            [img]http://dl.iteye.com/upload/attachment/222895/6fdc304a-8d6f-31d6-b0e6-960c46a49caf.jpg[/img] 
 
[b][size=large]內容簡介[/size][/b]
事務處理廣泛地應用于數據庫和操作系統領域,并在現代計算機系統中監控、控制和更新信息。本書向讀者展示了大型的、分布的、異構的計算機系統是如何進行可靠工作的。作者使用事務作為基本概念,說明了在有限的資金和風險下如何構建高性能的高可用性應用。書中還詳細闡述了各種可能發生的問題,以及解決這些問題的實際可用的技術。
本書列舉了大量成功的商業和研究系統的實例,此外,列出了許多事務處理算法的可編譯的C代碼片段。本書對于那些對實現分布式系統或客戶-服務器結構感興趣的人來說,是值得一讀的。
沒有事務,分布式系統就不能滿足典型應用的需要——這是許多系統實現人員和應用開發人員從實踐中得到的經驗。本書主要闡述事務概念是如何用于解決分布式系統問題的,以及這些概念如何使我們能夠在有限的資金和風險范圍內建立高性能、高可用性的應用系統。本書內容廣泛,從系統的角度全面闡述事務處理的概念和技術,涉及終端上的表示管理、通信子系統、操作系統。數據庫、程序設計語言的運行時系統以及應用開發環境等。
 
[b][size=large]譯者序[/size][/b]
 
值此譯稿完成之時,從DBWORLD驚悉關系模型的發明人E·F Codd博士于2003年4月18日不幸辭世(1923年~2003年)。人雖逝去,但關系模型這一知識財富卻在造福著人類。在整個計算機軟件領域,恐怕難以找到第二個像關系模型這樣簡單,但所帶來的市場價值卻如此巨大的概念。其實,傳承這一發明并使之真正實用化的關鍵人物有兩人:一是C·J Date,他使關系模型概念普及化,為大眾所接受;另一個當屬本書的作者之一Jim Gray博士,他使關系模型的技術實用化,為大眾服務。在IBM工作期間,Jim Gray參與和主持過IMS、System R、 SQL/DS、DB2等項目的開發。其中,除了System R僅作為研究原型,沒有成為產品外,其他幾個項目都發展成數據庫市場上有影響力的產品。這其中Jim Gray博士在事務處理技術方面的貢獻功不可沒。
在關系數據庫理論基本成熟后,各大公司在關系數據庫管理系統(RDBMS)的實現和產品開發中都遇到一系列技術問題。主要是在數據庫的規模愈來愈大,數據庫的結構愈來愈復雜,又有愈來愈多的用戶共享數據庫的情況下,如何保障數據的完整性、安全性、并發性以及故障恢復的能力,這些問題成為數據庫產品是否能實用化并最終為用戶接受的關鍵因素。Jim Gray在解決這些重大技術問題,使RDBMS成熟并順利進入市場的過程中,起到了關鍵性作用。概括地說,解決上述問題的主要技術手段和方法是:把對數據庫的操作劃分為稱為“事務”的基本原子單位,一個事務要么全做,要么全不做(即all-or-nothing原則);用戶在對數據庫發出操作請求時,需要對有關的數據“加鎖”,防止不同用戶的操作之間互相干擾;在事務運行過程中,采用“日志”記錄事務的運行狀態,以便發生故障時進行恢復;對數據庫的任何更新都采用“兩階段提交”策略。以上方法及其他各種方法總稱為“事務處理技術”。Jim Gray在事務處理技術上的創造性思維和開拓性工作,使他成為這一領域公認的權威人士,并于1998年獲得圖靈獎,成為自圖靈獎誕生32年來第三位因在數據庫技術的發展中做出重大貢獻而獲此殊榮的學者(見《ACM圖靈獎(1966~1999)》,高等教育出版社,2000年)。
本書即是Jim Gray博士和德國斯圖加特大學Andreas Reuter教授多年來在事務處理領域所取得成就的結晶。本書有如下幾個顯著特征:
?內容的組織和敘述的方法獨樹一幟 計算機科學在其60多年的發展中已形成了一個綜合性的學科體系,可分為硬件、軟件、計算機原理、操作系統……等諸多領域。現有的書通常是某個學科領域的知識總結。本書卻是一個例外。它好像是一位大師揮舞手中的巨擎,打破時空的界限,勾畫出的印象派杰作。作者用一個系統實現者的眼光闡述有關問題,力圖使讀者 “所學即能為我所用”,因此數據結構和程序片段在書中隨處可見。它更注重實效,更加獨樹一幟。
?內容的廣泛和技術的深入獨一無二 本書的目的是解決如何建造大型的、分布的、異構的計算機系統的問題。事務處理技術只是作者闡述這一復雜問題的“一種集成的概念框架”,書中內容分為七個部分,即事務處理基礎、容錯技術、面向事務的計算、并發控制、恢復、資源管理器實例、系統綜述;分別涉及計算機基本知識、數據庫系統、分布式系統、操作系統等。該書的內容涉獵廣泛,而在事務處理技術上講述得深入透徹而且完整全面。本書更像是一本關于事務處理的小型百科全書,這在計算機界是獨一無二的。
?技術的實踐和學術的研究完美結合 其實本書在整體上主張技術實踐優先論。事務處理是一個技術實踐引導理論研究的領域。通常商業系統實現了某些思想之后很久,該思想才會在學術界出現。Jim Gray常年在工業界的研究機構工作,大部分時間從事實際系統的開發。他實際是在通過本書向進行學術研究的人們提個醒兒,計算機的技術創新應該從研究系統開始,兩者的貢獻是不分高下的。
?扎實的功底和淵博的知識力透紙背 書中敘述的有關“Sphere of Control”的概念聞所未聞(第4章,譯為控制區域),事務理論詳盡透徹(第7章),文件系統的實現滴水不漏(第13~15章)。在本書的翻譯過程中,我們常常為作者深厚的功底和淵博的知識所折服,同時又為自己的知識欠缺而慚愧,自嘆不能精確地傳達作者精妙的論述。
當然本書也不是完美無缺的。由于本書的內容過多,在敘述上有些內容不夠簡練,有些內容的敘述甚至太過冗余。如事務的ACID特性,幾乎每章都用到,但每次都要重新解釋。這與本書的寫作風格有關,力圖使每章內容都相對保持獨立。
全書共8個部分19章。本書的翻譯、統稿和審校由孟小峰和于戈共同組織完成。孟小峰負責第1~8章,于戈負責第9~16章,其余部分共同負責。具體翻譯分工如下:序、前言由孟小峰翻譯;第1章由李凌偉、孟小峰翻譯;第2章由王博、張榮翻譯;第3章由白蕓、王建華翻譯;第4章由王海燕、丁銳翻譯;第5章由豆昱、李明晴翻譯;第6章由張新宇、肖震翻譯;第7章由孟小峰翻譯;第8章由張在建、羅學君、孟小峰翻譯;第9~11章由宋寶燕翻譯;第12章由王國仁、夏秀峰翻譯;第13章由鮑玉斌翻譯;第14章由王丹翻譯;第15章由于亞新翻譯;第16章由于戈翻譯;第18、19章由于戈、孟小峰翻譯。
譯者曾在2001年在羅馬VLDB大會上有幸見到Jim Gray,談到翻譯本書的打算,得到他的極大鼓勵,并在隨后的版權購買過程中給予很大的幫助。2002年在北京再次見到Jim Gray博士,談起我們的翻譯工作已接近尾聲,Jim 顯得極為高興,并欣然在回美國的旅途中給本書中譯本作了序。
譯者感謝機械出版社華章公司的編輯們,沒有他們的努力,本書是不可能完成的。
本書涉及面廣,內容豐富,術語量大,這在一般的書籍中是不常見的,翻譯難度可想而知。本書譯詞主要遵從教科書中的習慣用法,并參考《英漢計算機詞典》(修訂本,1998)等。為了搞清其他領域(如容錯、操作系統等)中的詞匯,我們專門請教了一些這方面的專家。但在翻譯中仍感力不從心,譯文中不當之處在所難免。誠懇讀者批評指正并不吝賜教。如果你有任何建議或意見,歡迎發Email給xfmeng@public.bta.net.cn, yuge@ mail.neu.edu.cn。
 
[b][size=large]前言[/size][/b]
 
買書的同時若能買到讀書的時間,將是再好不過了。
亞瑟·叔本華:附錄和補遺
寫作此書的目的
本書的目的就是幫助讀者理解大型、分布、異構的計算機系統可靠工作的原理。與常見的分布計算的復雜方法不同,本書力圖展示一種易于使用的分布系統應用開發方法。為什么書名不用諸如分布系統、高可靠性、互操作性或客戶/服務器等詞匯,而使用了一個比較一般的術語—事務處理呢?對很多人來說這是一個表示老式數據處理的詞匯,指面向批處理和大型主機的工作方式。
問題的關鍵是,一個大型的應用系統可能具有上千個終端,用到上百臺計算機,需提供絕對沒有停機時間的服務,對這種系統的設計、實現和操作,只從一個角度來闡述清楚是不可能的,這也是本書如此浩繁的原因。因此需要用一種綜合的觀察角度和方法來解決分布系統的問題。我們的宗旨是說明,事務提供了這樣一種集成的概念框架,而面向分布事務的操作系統可以作為具體的實現技術。客戶/服務器范型提供了一種結構化系統和開發應用的好方式,但仍然需要用事務來控制客戶/服務器的交互操作。簡而言之:沒有事務,分布式系統不能滿足典型實際應用的需要。
不過這并不是最關鍵的理由;更重要的是,這是許多人(包括系統實現者、系統管理者和應用開發人員)從實踐中得到的收獲。當然,開發大型系統的概念已經由來已久。事實上,在批處理處于全盛的時期,一些主要思想老早就被人們提出了,而且至今它們也不顯得過時。事務處理概念是為解決單處理器聯機應用的復雜性而被提出的。其實,這些概念對具有更高復雜性的海量分布系統的有效實現,顯得更為至關重要。本書主要闡述事務概念是如何用于解決分布系統問題的,以及這些概念如何使我們在有限的資金和風險范圍內,能夠建立高性能、高可用性的應用。我們試圖通過一些我們所熟悉的“歷史教訓”來闡述這一開發理念。歸結一點,事務有助于掩蓋,甚至避免分布系統的復雜性。
目前有很多的書是關于數據庫系統(傳統的數據庫和分布數據庫)、操作系統、計算機通信、應用開發的—還可以列很多。圍繞這些術語的學科劃分已深深地根植于世界各地的計算機科學的教學體系中。相應的教育和專家也按此分門別類。有關的書籍通常是以一種枚舉的風格,將過去十多年在這一領域的技術文獻中的主要思想羅列給讀者。這種寫作風格試圖提供很多觀點和可供選擇的方案,但很少告訴讀者什么觀點是好的,什么是不怎么好的,以及為什么好與不好。更確切地說,你若要真的設計和實現一個實際系統,這些有關算法的一般綜述幾乎不能說明什么,例如,如何開始以及從哪里開始你的系統設計。
我們的宗旨是幫助讀者解決實際問題。本書的重點在于,對問題只提供一兩個解決方法和有關的說明,而對許多其他的方法并不一一涉及,也就是說本書不采用百科全書式的敘述風格。但本書的內容是廣泛的,它將從一個系統的角度全面闡述事務處理的概念和技術。要使一個大型的系統正常運行,必須采用一種真正的“一條龍”的觀點,即從一個請求開始,通過系統的各個層次和構件,直到結果被安全地輸出為止。這其中要涉及終端上的表示管理、通信子系統、操作系統、數據庫、程序設計語言的執行系統以及應用開發環境等。設計一個集成度如此之高的系統,所需要的一套設計方案將完全有別于功能有限的算法設計。這種全面整體性的方法是在其他有關分布系統和數據庫的著作中所未曾見到的。自1986年我們開始寫作本書以來,我們一直深信這種方法是必需的。
內容的選擇和組織
由于采用“一條龍”的觀點,這需要我們覆蓋很多基礎性的東西,我們將重點放在事務處理的基本概念上:如簡單的TP系統的結構化問題、簡單的事務模型、簡單的加鎖、簡單的寫日志、簡單的恢復等等。隨便翻翻目前的教材和參考書,就會發現它們在基本概念上是模糊不清的。例如,在現有的教材中,我們還沒有發現有關 B樹的真正實現的描述。而B樹目前是用于數據庫、文件系統、信息檢索系統等之中的基本存取路徑結構,是真正基本的東西。本書更像一本編譯課程的教材或 Tanenbaum的操作系統書。其中提供了很多代碼片段用于說明基本算法和數據結構。
本書注重實效,詳盡闡述并覆蓋基本的事務處理問題。本書的寫作使我們確信這是一種好的方法,不過這種寫作方法和風格可能看起來比較陌生。我們的動機就是要以注重實效的觀點闡述問題。目前沒有結構化復雜系統的理論;因此重大決策不是依賴理論,更合適的做法是依賴良好的基礎修養和依從好的工程原則—即注重實效的標準。我們相信,這些從面向事務處理的基本概念中導出的原則,會在未來若干年內顯得至關重要。
本書主體部分有7個主題,共分16章,閱讀上可或多或少地相互獨立,并可按不同的次序閱讀。
第一個內容是事務處理的總體概述(第1章)。它講述了總體的系統概貌。介紹了基本的事務特性:原子性(要么全做,要么全不做)、一致性(狀態的正確轉換)、隔離性(沒有并發沖突)、永久性(已提交的更新不受任何系統故障的影響)—簡稱為ACID。沒有技術背景的讀者閱讀到此,就能夠對本領域有大致的了解。
第2章是為那些對計算機科學基本術語不甚熟悉的讀者準備的。本章介紹了有關硬件、軟件、協議標準等等方面最為重要的術語和概念。所有這些術語是后續討論所必需的。
第3章闡述為什么系統會失敗,并給出如何避免此類故障的建議。本章回顧了硬件和軟件的容錯概念和技術(如徹底失敗、冗余、模塊化、修復)。若你想使用不完善的現成組件開發一個具有1萬年平均無故障時間的模塊,本章可以提供這方面的內容。第3章解釋了在構建高可用軟件時事務的重要意義。
第4~6章講述了事務的有關理論和使用。第4章詳細討論了把應用系統構造為事務的具體含義。重點討論了目前不能被扁平事務很好支持的計算類型。進行這些計算的應用需要事務概念的擴展和廣義性。第5章通過描述TP監控器的作用,解釋了面向事務的計算究竟對操作系統和其他低級別部件意味著什么。同時還解釋了事務程序如何與這些系統服務交互作用。第6章是面向程序設計人員的。它提供了很多程序控制結構和代碼片段來解釋事務型的遠程過程調用的工作原理、請求調度的處理,以及其他精妙之處。對位級(bit-level)事件不感興趣的讀者可略過本章的前半部分,直接從6.4節事務隊列的內容開始閱讀。
第7、8章介紹了并發的理論和實踐。事務處理系統將應用中的所有并行執行部分掩蓋起來,因此支持了ACID特性中的隔離性。第7章敘述了這些技術背后的理論,第8章則展示了如何用封鎖技術實現這一理論。
第9~12章介紹了事務管理和恢復技術,即與事務原子性和永久性有關的內容。第9章講述寫日志和歸檔的處理。第10章討論如何編寫事務型資源管理器,如數據庫系統或隊列管理器。它闡述了資源管理器如何與事務相結合,如何寫日志記錄、獲得鎖和參與事務的提交和回滾。書中給出了一個簡單的資源管理器(一位資源管理器)來具體展示這方面的技術。第11章介紹事務管理器,它具體負責確定事務的狀態和了解參與此事務的資源管理器的情況。本章給出了一個簡單事務管理器的具體實現—當然對具體細節不感興趣的讀者同樣可以略過這些內容。第12章是事務管理器所用到的高級概念和技術的匯總。
第13~15章討論一個相對獨立的內容:一個非常重要的資源管理器—事務型文件系統的實現。從裸金屬(磁盤)開始,討論空間管理問題,并詳細論述了系統中緩沖管理器的角色。接下來,介紹了在定長頁面中變長元組的組織,以及支持面向元組存取的所有文件組織方式。最后,第15章討論了關聯存取,主要介紹B樹及其在高并行環境下的實現問題。所有這些都以一種支持ACID特性的方式實現,即產生的文件、元組和存取路徑均是事務型對象。
.第16章概述事務處理范疇內許多商業系統的情況。我們試圖揭示每一系統的特征。這不是一個競爭性的比較,而是對每一系統優點的正面描述。
最后,附有一個關于事務處理術語的詞匯表。擁有如此大量的詞匯,這在一般的教材中是不常見的。然而,正如第5章引言所指出的,事務處理領域的術語是全面而定義完好的。因此詞匯表可以起到兩個目的:首先,若對某個術語不明確,可查詞匯表找到有關的解釋。其次,通過這種方式,詞匯表有助于促進本領域術語的統一。
大多數章包含了一節歷史評注,試圖說明事情的由來、一些思想的首次出處等。與計算機科學的許多其他領域不同,事務處理技術主要是由工業界研究機構和開發實驗室提出的。一些在商業產品中提出并實現的思想,是在若干年后被重新發現并作為科學成果加以發表的。在歷史評注中,我們盡我們所知,盡量包含來自兩方面的貢獻。
本書大部分后章還配有習題,小到簡單的內容復習題,大到一個學期項目。其中大部分題目還在章尾給出了答案。仿照唐納德·克努特的做法,對每一道題目有一個形如[節,級別]的修飾。“節”用于說明習題涉及哪一節的內容,“級別”用于指明習題的難度系數:
[10] 指可以在1分鐘時間完成的題目(用于檢查是否閱讀了書中的有關內容)。
[20] 指可以在15~20分鐘時間完成的題目。
[25] 指可以在1小時時間完成的題目。
[30] 指短的(程序設計)項目:可以在一天內完成。
[40] 指較大型的(程序設計)項目:可以在兩周時間完成。
另外,對難度超過[40]的題目,用[項目]標識。而對標有[討論]的題目,則需要讀者走出去,好好地調查研究一番。
本書原本的計劃是要包含SQL的實現和有關事務的應用設計。隨著寫作的推進,我們意識到已沒有空間和時間來討論這些內容。于是,正如現在所看到的,本書就是一本關于事務如何實現的書。Ceri和Pelagatti有很出色的書[1984]討論了高級別數據庫的問題(如SQL、規范化、優化以及一些事務管理的問題)。
有關本書的學習
本書主要面向高年級本科生、研究生和一些可能需要了解所用事務處理系統情況的專業程序員(如CICS/DB2用戶)或需要一本基本參考書的專業程序人員。
本書的內容在目前大學計算機科學的教學體系中沒有對應的科目。分門別類是現有課程結構的本質特征,而且至今還沒有標準的事務處理課程。然而,在本書的寫作過程中,各個階段的初稿已經被用于許多本科和研究生的課程中。我們認為我們所采用的寫作方法在計算機科學現存結構中是合適的。但我們希望,這一方法的出現將有助于消除現有分門別類的思想。以下是將本書用于各種課程的建議:
基本了解:第1章,2.7、4.1~4.2、5.1~5.3、5.5~5.7節,第16章。
事務處理導論:第1、2章,3.1~3.6節,第4、5章,6.4~6.5、7.1~7.6節,第9、10、16章。
數據庫系統:第1、4、7、10、13、14、15章。
分布式系統:第1、2、3、4、7、8、10、12、16章。
操作系統:第1、2、3、5、6、7、8、10、11、13、16章。
高級內容:在高級課程中,第1、3章可以略過,或者簡要地過一遍。另外,可以采用Tanenbaum的有關操作系統和計算機網絡的書,Ceri和 Pelagatti的分布數據庫的書,Oszu和Valduriez的分布數據庫原理的書,和Date的任何一本數據庫的書。
當然還可以想到許多其他的組合方式。對已經熟悉本領域內容的讀者,可以略過第1章、第2章;不過我們建議大家瀏覽一下這部分內容,以便了解本書用到的術語。
第3章可以跳過,但我們建議大家閱讀一下。事務乍看起來太顯而易見。然而第3章仔細地闡述了為什么事務是正確的異常處理模型和開發高可用系統的關鍵。這里討論的技術有助于更好地理解容錯在系統級的含義,并且它們可以隨時用于應用系統開發之中。
我們在敘述中盡量保持各章內容互不依賴。如果你閱讀了全書,就會發現各章間有一些重復內容。這保證了各章使用上的獨立性。
為使本書更便于教學上的使用,教師可以考慮通過Transarc公司的Encina大學項目獲取有關的軟件。Encina產品提供了在開放計算環境中的基于分布、標準的聯機事務處理。本書的很多內容可以使用Encina產品模塊家族,以課程設計的形式具體實驗。例如,分布事務管理、事務遠程過程調用、高級鎖和恢復模型、共享寫日志系統、面向記錄的資源管理器和事務監控器。
若你有充裕的時間,并對事務處理有足夠的興趣,不妨讀一下Bjork and Davies[1972;1973;1978]的論文。這些早期的論文開創了這一領域,以我們目前的觀察,閱讀這些論文會讓我們受益匪淺。事務的演進不像一種自然衰減過程,而更像一種激進方式,力圖減低難以管理的復雜性。閱讀這些早期的基本論文,你還會發現其中的預見還遠未成為現實。
結束語
正如致謝中指出的,本書的初稿歷經了兩年時間(1990~1991)的評閱和教學試用。這不僅改進了本書內容的表述,增加了準確性,而且改變了本書的總體設計。一些新的章節增加進來,而另一些內容則被刪掉了,書的厚度也增加了一倍。書的評審和熱烈的辯論也改變了材料的組織方式。我們兩個一個按自頂向下的方式開始寫作,而另一個采用自底向上的方式寫作。最后,我們兩個互相顛倒了各自的寫作方法。
即使如此,錯誤依然存在,為此我們沒有任何借口可以逃脫應有的責任。對發現本書的錯誤并不吝告知者,我們將不勝感激。請把意見寄給出版社轉交作者,或發電子郵件給Gray@microsoft.com。
致謝
本書得益于許多人士詳盡的批評和建議。我們衷心地感謝他們的指導。我們尤其要感激Frank Bamberger、Phil Bernstein、Noel Herbst、Bruce Lindsay、Dave Lomet、Dan Siewiorek、Nandit Soparkar、Kent Treiber和Laurel Wentworth等人,感謝他們對本書敘述重點和焦點的改進意見。更為珍貴的是來自Betty Salzberg和她所教班級的批評,它促使形成了本書的表述方式。謝謝大家。
Walker Cunningham,我們的負責文字的編者,仔細審閱了所有章節。他的不懈努力使本書顯得更為清晰。
我們的同事們對本書某些章節做出了很多重要的貢獻。Betty Salzberg建議需要第2章(術語)。Dan Siewiorek和Vic Vyssotsky對容錯一章傾注了大量心血。Bruce Lindsay和Harald Sammer對事務概念的寫作大有幫助。Phil Bernstein、Noel Herbst、Bruce Lindsay和Ron Obermarck 引起我們對事務管理的重新思考。Dave Lomet和Franco Putzolu對記錄和文件管理的章節貢獻頗多。Frank Bamberger、Elliot Moss、Don Slutz和Nandit Sopakar給本書提出了許多有價值的批評意見。
值得一提的是Charlie Davies,20年前開創本領域的先驅者。Charlie有關spheres of control(控制區域)的工作鮮為人知。他的論文有些晦澀,但所有與他接觸過的人無不為他的遠見卓識所折服。從事這一領域研究的人們仍在致力于解決他所預見到的問題。第4章以更現代的詞匯闡述了他的這一思想。
事務處理是一個實踐引導理論的研究領域。通常在商業系統實現了某些思想很久以后,該思想才會在學術界出現。類似的事情不僅讓人想起當年伽利略向威尼斯商人宣稱發明了望遠鏡,而此時市井上批發商們正在銷售著批量生產的荷蘭望遠鏡。
貫穿本書,我們一直面臨著兩難的選擇。是把功勞歸于首先公開發表該思想的人們?抑或應該優先考慮在產品中最早開發和實現該思想的人們?學術界的傳統和美國的專利法律將優先權賦予首先發表者。我們試圖兩者并重。在每一章歷史評注的敘述中,對來自工業界和學術界的思想貢獻,我們盡量做到不偏不倚。也許這樣的討論根本沒有實際意義;實現者們要的不是學術的榮譽,他們要的是金錢。
Franco Putzolu(一個實現者)對本領域,尤其是作者有深刻的影響。Franco從沒有寫過一篇論文,也沒有一項專利,但他的思想和代碼卻是System R、SQL/DS、DB2、Allbase和NonStop SQL等系統的核心。這些設計被他人廣泛地使用,同樣也用在本書中。Franco Putzolu值得本書對他賦予如此的殊榮。
Bruce Spatz(我們的出版商)在有關本書的側重點方面給予我們有益的指導。他還組織對本書進行多次的審閱,安排了課堂測試,而且在我們最需要的時候給予鼓勵。我們還要感謝我們的項目經理,專業書中心的Jennifer Ballentine和我們的文字編輯Jeanne Thieme,對本書的巨大幫助。
Andreas的學生們對本書的很多方面給予幫助。他們閱讀了本書初稿,并用于教學,嘗試做其中的習題,研究有關參考文獻,等等。而且,由于他們的導師不斷面臨“馬上交稿”的壓力而經常缺席,這意味著學生們必須更多地要靠自己的努力。
Gabriele Ziegler是Andreas的秘書,在此需特別感謝她在Andreas忙于寫書期間安排處理有關的事務。當Andreas忙于“馬上交稿”而無暇理會其他人的時候,她都要出面周旋。
Christiane Reuter幾乎寫完了有關應用設計的一章,但最后還是放棄了。然而,她卻照料了在Ripa第一次處于長期寫作狀態中的作者—由于要應付當地能源和可怕氣候,這可是一項不簡單的任務。此外,她還要忍受多年的熬夜和沒有周末的折磨。
Tandem計算機公司和DEC公司給了非常慷慨的支持。
最后感謝所有鼓勵我們前行的人們,感謝帶給我們愉悅的人們,感謝能寬容我們的困擾和情緒波動的人們。
 
Jim Gray
Andreas Reuter
(斯圖加特大學)
 
 
[b][size=large]中文版序[/size][/b]
 
本書的基本前提在于,事務概念是分布式計算的一個重要抽象。在某一層次上實現了事務,那么所有更高的層次上會有一個簡化的失敗語義(要么全做,要么全不做),并且錯誤處理也會簡單的多。
十年前當本書初次面世時,這是一個基本的觀點。自此以后,因特網蓬勃發展,分布式計算在CORBA、DCOM和現在的Web Service的支持下,變得更為切實可行。TP監控器已經被Web服務器和對象請求代理所取代。數據庫系統也已經成熟多了。
今天我們看到,許多技術都已接受了這一觀點。事務技術被廣泛用于操作系統、事務型文件系統,并且事務管理器被加入到了大多數的操作系統中。由于事務技術已經成熟,所以事務型資源管理器(如隊列管理器、工作流系統、持久對象系統和主存數據庫系統等)日益推廣流行。
本書中的一些內容已經過時了—甚至是作廢了—但其核心概念和技術已從數據庫系統擴展到了分布式計算的范疇。
我和Andreas Reuter感謝譯者的辛勤工作。中文,作為更為簡潔的語言,會使本書更薄些(也更輕了),中文版還會使十多億人有機會閱讀本書。我希望本書對各位是有價值和有幫助的。
 
Jim Gray
微軟研究院
2002.10
 
[b][size=large]序[/size][/b]
 
企業、政府、科學、文化等領域的活動,正在變得越來越依賴于計算機信息資源。隨著計算機系統獲取和維護的信息量和種類日益增多,如何使用、管理和保護這些信息的技術對人類和現代工業社會變得至關重要。
事務處理技術是有效管理和使用計算機信息資源的關鍵。
事務處理涵蓋了對所存儲的信息和應用程序加以管理兩方面的技術,其中應用程序負責對信息的解釋和具體操作。從數據庫恢復和并發控制,到事務監控器,負責初始化和控制應用的執行。這些事務處理技術為關鍵信息資源的管理和保護提供了必要的機制和措施,而這些關鍵信息資源其實已成為商業、科學、文化活動的基礎。
為使日益劇增的計算機信息有用,要求它們必須能夠準確反映現實世界的情況,并能保證應用程序可獲得它們。通常,使用所存儲的信息是指訪問和修改有關的數據,這些數據集中描述或刻畫了現實世界中的某些現象或活動的狀態和演化。由于許多數據要一起被訪問和修改以便正確反映現實世界,因此必須保證相關數據的一致性。任何對相關數據修改的中斷,或對相關數據訪問或修改的交錯,都會造成數據的不一致性。
保證數據一致性的關鍵是要明確數據訪問和更新的序列。這一序列稱為事務。事務處理技術就是要確保一個事務要么完整地執行,要么根本不執行,并保證并發執行的事務彼此互不干擾,如同在隔離執行一樣。這一技術的意義尤其在于,在一些復雜情況下上述保證仍能得到支持,如計算機部件發生故障、數據分布在不同計算機上或不同事務的交叉或并行執行等。
過去25年中,企業和大學的實驗室在事務處理技術方面付出了巨大的努力,已使得該技術可以保證事務的“all-or-nothing”(要么全做,要么全不做)執行,以及并發事務的隔離性。本書第一次全面介紹了事務處理系統的技術和方法,用來控制和保護事務處理系統管理的有價值的信息資源。作者詳細描述了商品化的和實驗性的事務處理系統的技術現狀。重點論證了這些技術的有效性和高效性。詳細解釋了為什么要面對這些問題以及如何解決這些問題,所有這些使得本書不僅對求知的學生,而且對系統開發人員都是十分有益的。
作者Jim Gray博士和Andreas Reuter教授,在商品化和實驗性事務處理系統的實現技術方面,加起來已有五十多年的直接經驗。他們對事務處理技術做出了巨大的貢獻,并因他們的學術成就而享譽世界。本書既是他們對事務處理問題深刻理解的結晶,也是對大部分行之有效的事務處理實現技術的難得的評價。作者具有的對基本概念和使用方法的辨識能力,給讀者理解事務處理系統的問題和技術,提供了堅實和實用的基礎。
.本書覆蓋了事務處理技術的所有方面。開始的幾章為讀者介紹了事務概念和事務執行的計算環境的基本知識,其中給出了有關計算機部件故障的重要假設,即事務處理系統必須對故障部件容錯。書中闡述了事務處理監控器的作用。事務處理監控器主要控制應用程序和所提供功能的激活和執行。這為討論并發控制和恢復技術打下了基礎。事務隔離性的討論覆蓋了并發控制問題,它涉及了從硬件層到記錄和索引的隔離語義的各方面問題。書中詳細討論了故障情況下重要而復雜的事務恢復技術。從記錄管理到分布提交協議,對所需要的用于保證事務的“要么全做,要么全不做”執行和數據永久性的恢復技術詳加闡述。其后,介紹了將事務恢復技術和隔離技術用于記錄級存儲和關聯索引的設計與實現。從這些章中,數據庫系統方面的學生和開發人員都可以獲得有用的信息。本書最后,從商業和學術兩個方面對事務處理系統加以綜述。
貫穿全書,作者對基本問題給出了深入細致的討論,對已證明行之有效的技術給出了詳細具體的描述。對概念方面的內容,輔以一些仔細設計的圖表加以說明。對技術方面的內容,則給出代碼片段,有效提高了讀者對實現問題的認識。
本書既綜合覆蓋了事務處理技術,又詳細描述了相關問題和算法,對學生是很好的教材,對專業人士則是資源寶庫。事務處理技術對工業社會的信息管理需求十分重要,這需要人們對該技術深入理解和廣泛應用。對于即將應用和拓展事務處理概念和技術的人士,本書可以充當這方面的指南和參考書。
 
Bruce Lindsay
IBM Almaden Research Center
圣荷塞,加利福尼亞
                        
                        
                        [b][size=large]內容簡介[/size][/b]
事務處理廣泛地應用于數據庫和操作系統領域,并在現代計算機系統中監控、控制和更新信息。本書向讀者展示了大型的、分布的、異構的計算機系統是如何進行可靠工作的。作者使用事務作為基本概念,說明了在有限的資金和風險下如何構建高性能的高可用性應用。書中還詳細闡述了各種可能發生的問題,以及解決這些問題的實際可用的技術。
本書列舉了大量成功的商業和研究系統的實例,此外,列出了許多事務處理算法的可編譯的C代碼片段。本書對于那些對實現分布式系統或客戶-服務器結構感興趣的人來說,是值得一讀的。
沒有事務,分布式系統就不能滿足典型應用的需要——這是許多系統實現人員和應用開發人員從實踐中得到的經驗。本書主要闡述事務概念是如何用于解決分布式系統問題的,以及這些概念如何使我們能夠在有限的資金和風險范圍內建立高性能、高可用性的應用系統。本書內容廣泛,從系統的角度全面闡述事務處理的概念和技術,涉及終端上的表示管理、通信子系統、操作系統。數據庫、程序設計語言的運行時系統以及應用開發環境等。
[b][size=large]譯者序[/size][/b]
值此譯稿完成之時,從DBWORLD驚悉關系模型的發明人E·F Codd博士于2003年4月18日不幸辭世(1923年~2003年)。人雖逝去,但關系模型這一知識財富卻在造福著人類。在整個計算機軟件領域,恐怕難以找到第二個像關系模型這樣簡單,但所帶來的市場價值卻如此巨大的概念。其實,傳承這一發明并使之真正實用化的關鍵人物有兩人:一是C·J Date,他使關系模型概念普及化,為大眾所接受;另一個當屬本書的作者之一Jim Gray博士,他使關系模型的技術實用化,為大眾服務。在IBM工作期間,Jim Gray參與和主持過IMS、System R、 SQL/DS、DB2等項目的開發。其中,除了System R僅作為研究原型,沒有成為產品外,其他幾個項目都發展成數據庫市場上有影響力的產品。這其中Jim Gray博士在事務處理技術方面的貢獻功不可沒。
在關系數據庫理論基本成熟后,各大公司在關系數據庫管理系統(RDBMS)的實現和產品開發中都遇到一系列技術問題。主要是在數據庫的規模愈來愈大,數據庫的結構愈來愈復雜,又有愈來愈多的用戶共享數據庫的情況下,如何保障數據的完整性、安全性、并發性以及故障恢復的能力,這些問題成為數據庫產品是否能實用化并最終為用戶接受的關鍵因素。Jim Gray在解決這些重大技術問題,使RDBMS成熟并順利進入市場的過程中,起到了關鍵性作用。概括地說,解決上述問題的主要技術手段和方法是:把對數據庫的操作劃分為稱為“事務”的基本原子單位,一個事務要么全做,要么全不做(即all-or-nothing原則);用戶在對數據庫發出操作請求時,需要對有關的數據“加鎖”,防止不同用戶的操作之間互相干擾;在事務運行過程中,采用“日志”記錄事務的運行狀態,以便發生故障時進行恢復;對數據庫的任何更新都采用“兩階段提交”策略。以上方法及其他各種方法總稱為“事務處理技術”。Jim Gray在事務處理技術上的創造性思維和開拓性工作,使他成為這一領域公認的權威人士,并于1998年獲得圖靈獎,成為自圖靈獎誕生32年來第三位因在數據庫技術的發展中做出重大貢獻而獲此殊榮的學者(見《ACM圖靈獎(1966~1999)》,高等教育出版社,2000年)。
本書即是Jim Gray博士和德國斯圖加特大學Andreas Reuter教授多年來在事務處理領域所取得成就的結晶。本書有如下幾個顯著特征:
?內容的組織和敘述的方法獨樹一幟 計算機科學在其60多年的發展中已形成了一個綜合性的學科體系,可分為硬件、軟件、計算機原理、操作系統……等諸多領域。現有的書通常是某個學科領域的知識總結。本書卻是一個例外。它好像是一位大師揮舞手中的巨擎,打破時空的界限,勾畫出的印象派杰作。作者用一個系統實現者的眼光闡述有關問題,力圖使讀者 “所學即能為我所用”,因此數據結構和程序片段在書中隨處可見。它更注重實效,更加獨樹一幟。
?內容的廣泛和技術的深入獨一無二 本書的目的是解決如何建造大型的、分布的、異構的計算機系統的問題。事務處理技術只是作者闡述這一復雜問題的“一種集成的概念框架”,書中內容分為七個部分,即事務處理基礎、容錯技術、面向事務的計算、并發控制、恢復、資源管理器實例、系統綜述;分別涉及計算機基本知識、數據庫系統、分布式系統、操作系統等。該書的內容涉獵廣泛,而在事務處理技術上講述得深入透徹而且完整全面。本書更像是一本關于事務處理的小型百科全書,這在計算機界是獨一無二的。
?技術的實踐和學術的研究完美結合 其實本書在整體上主張技術實踐優先論。事務處理是一個技術實踐引導理論研究的領域。通常商業系統實現了某些思想之后很久,該思想才會在學術界出現。Jim Gray常年在工業界的研究機構工作,大部分時間從事實際系統的開發。他實際是在通過本書向進行學術研究的人們提個醒兒,計算機的技術創新應該從研究系統開始,兩者的貢獻是不分高下的。
?扎實的功底和淵博的知識力透紙背 書中敘述的有關“Sphere of Control”的概念聞所未聞(第4章,譯為控制區域),事務理論詳盡透徹(第7章),文件系統的實現滴水不漏(第13~15章)。在本書的翻譯過程中,我們常常為作者深厚的功底和淵博的知識所折服,同時又為自己的知識欠缺而慚愧,自嘆不能精確地傳達作者精妙的論述。
當然本書也不是完美無缺的。由于本書的內容過多,在敘述上有些內容不夠簡練,有些內容的敘述甚至太過冗余。如事務的ACID特性,幾乎每章都用到,但每次都要重新解釋。這與本書的寫作風格有關,力圖使每章內容都相對保持獨立。
全書共8個部分19章。本書的翻譯、統稿和審校由孟小峰和于戈共同組織完成。孟小峰負責第1~8章,于戈負責第9~16章,其余部分共同負責。具體翻譯分工如下:序、前言由孟小峰翻譯;第1章由李凌偉、孟小峰翻譯;第2章由王博、張榮翻譯;第3章由白蕓、王建華翻譯;第4章由王海燕、丁銳翻譯;第5章由豆昱、李明晴翻譯;第6章由張新宇、肖震翻譯;第7章由孟小峰翻譯;第8章由張在建、羅學君、孟小峰翻譯;第9~11章由宋寶燕翻譯;第12章由王國仁、夏秀峰翻譯;第13章由鮑玉斌翻譯;第14章由王丹翻譯;第15章由于亞新翻譯;第16章由于戈翻譯;第18、19章由于戈、孟小峰翻譯。
譯者曾在2001年在羅馬VLDB大會上有幸見到Jim Gray,談到翻譯本書的打算,得到他的極大鼓勵,并在隨后的版權購買過程中給予很大的幫助。2002年在北京再次見到Jim Gray博士,談起我們的翻譯工作已接近尾聲,Jim 顯得極為高興,并欣然在回美國的旅途中給本書中譯本作了序。
譯者感謝機械出版社華章公司的編輯們,沒有他們的努力,本書是不可能完成的。
本書涉及面廣,內容豐富,術語量大,這在一般的書籍中是不常見的,翻譯難度可想而知。本書譯詞主要遵從教科書中的習慣用法,并參考《英漢計算機詞典》(修訂本,1998)等。為了搞清其他領域(如容錯、操作系統等)中的詞匯,我們專門請教了一些這方面的專家。但在翻譯中仍感力不從心,譯文中不當之處在所難免。誠懇讀者批評指正并不吝賜教。如果你有任何建議或意見,歡迎發Email給xfmeng@public.bta.net.cn, yuge@ mail.neu.edu.cn。
[b][size=large]前言[/size][/b]
買書的同時若能買到讀書的時間,將是再好不過了。
亞瑟·叔本華:附錄和補遺
寫作此書的目的
本書的目的就是幫助讀者理解大型、分布、異構的計算機系統可靠工作的原理。與常見的分布計算的復雜方法不同,本書力圖展示一種易于使用的分布系統應用開發方法。為什么書名不用諸如分布系統、高可靠性、互操作性或客戶/服務器等詞匯,而使用了一個比較一般的術語—事務處理呢?對很多人來說這是一個表示老式數據處理的詞匯,指面向批處理和大型主機的工作方式。
問題的關鍵是,一個大型的應用系統可能具有上千個終端,用到上百臺計算機,需提供絕對沒有停機時間的服務,對這種系統的設計、實現和操作,只從一個角度來闡述清楚是不可能的,這也是本書如此浩繁的原因。因此需要用一種綜合的觀察角度和方法來解決分布系統的問題。我們的宗旨是說明,事務提供了這樣一種集成的概念框架,而面向分布事務的操作系統可以作為具體的實現技術。客戶/服務器范型提供了一種結構化系統和開發應用的好方式,但仍然需要用事務來控制客戶/服務器的交互操作。簡而言之:沒有事務,分布式系統不能滿足典型實際應用的需要。
不過這并不是最關鍵的理由;更重要的是,這是許多人(包括系統實現者、系統管理者和應用開發人員)從實踐中得到的收獲。當然,開發大型系統的概念已經由來已久。事實上,在批處理處于全盛的時期,一些主要思想老早就被人們提出了,而且至今它們也不顯得過時。事務處理概念是為解決單處理器聯機應用的復雜性而被提出的。其實,這些概念對具有更高復雜性的海量分布系統的有效實現,顯得更為至關重要。本書主要闡述事務概念是如何用于解決分布系統問題的,以及這些概念如何使我們在有限的資金和風險范圍內,能夠建立高性能、高可用性的應用。我們試圖通過一些我們所熟悉的“歷史教訓”來闡述這一開發理念。歸結一點,事務有助于掩蓋,甚至避免分布系統的復雜性。
目前有很多的書是關于數據庫系統(傳統的數據庫和分布數據庫)、操作系統、計算機通信、應用開發的—還可以列很多。圍繞這些術語的學科劃分已深深地根植于世界各地的計算機科學的教學體系中。相應的教育和專家也按此分門別類。有關的書籍通常是以一種枚舉的風格,將過去十多年在這一領域的技術文獻中的主要思想羅列給讀者。這種寫作風格試圖提供很多觀點和可供選擇的方案,但很少告訴讀者什么觀點是好的,什么是不怎么好的,以及為什么好與不好。更確切地說,你若要真的設計和實現一個實際系統,這些有關算法的一般綜述幾乎不能說明什么,例如,如何開始以及從哪里開始你的系統設計。
我們的宗旨是幫助讀者解決實際問題。本書的重點在于,對問題只提供一兩個解決方法和有關的說明,而對許多其他的方法并不一一涉及,也就是說本書不采用百科全書式的敘述風格。但本書的內容是廣泛的,它將從一個系統的角度全面闡述事務處理的概念和技術。要使一個大型的系統正常運行,必須采用一種真正的“一條龍”的觀點,即從一個請求開始,通過系統的各個層次和構件,直到結果被安全地輸出為止。這其中要涉及終端上的表示管理、通信子系統、操作系統、數據庫、程序設計語言的執行系統以及應用開發環境等。設計一個集成度如此之高的系統,所需要的一套設計方案將完全有別于功能有限的算法設計。這種全面整體性的方法是在其他有關分布系統和數據庫的著作中所未曾見到的。自1986年我們開始寫作本書以來,我們一直深信這種方法是必需的。
內容的選擇和組織
由于采用“一條龍”的觀點,這需要我們覆蓋很多基礎性的東西,我們將重點放在事務處理的基本概念上:如簡單的TP系統的結構化問題、簡單的事務模型、簡單的加鎖、簡單的寫日志、簡單的恢復等等。隨便翻翻目前的教材和參考書,就會發現它們在基本概念上是模糊不清的。例如,在現有的教材中,我們還沒有發現有關 B樹的真正實現的描述。而B樹目前是用于數據庫、文件系統、信息檢索系統等之中的基本存取路徑結構,是真正基本的東西。本書更像一本編譯課程的教材或 Tanenbaum的操作系統書。其中提供了很多代碼片段用于說明基本算法和數據結構。
本書注重實效,詳盡闡述并覆蓋基本的事務處理問題。本書的寫作使我們確信這是一種好的方法,不過這種寫作方法和風格可能看起來比較陌生。我們的動機就是要以注重實效的觀點闡述問題。目前沒有結構化復雜系統的理論;因此重大決策不是依賴理論,更合適的做法是依賴良好的基礎修養和依從好的工程原則—即注重實效的標準。我們相信,這些從面向事務處理的基本概念中導出的原則,會在未來若干年內顯得至關重要。
本書主體部分有7個主題,共分16章,閱讀上可或多或少地相互獨立,并可按不同的次序閱讀。
第一個內容是事務處理的總體概述(第1章)。它講述了總體的系統概貌。介紹了基本的事務特性:原子性(要么全做,要么全不做)、一致性(狀態的正確轉換)、隔離性(沒有并發沖突)、永久性(已提交的更新不受任何系統故障的影響)—簡稱為ACID。沒有技術背景的讀者閱讀到此,就能夠對本領域有大致的了解。
第2章是為那些對計算機科學基本術語不甚熟悉的讀者準備的。本章介紹了有關硬件、軟件、協議標準等等方面最為重要的術語和概念。所有這些術語是后續討論所必需的。
第3章闡述為什么系統會失敗,并給出如何避免此類故障的建議。本章回顧了硬件和軟件的容錯概念和技術(如徹底失敗、冗余、模塊化、修復)。若你想使用不完善的現成組件開發一個具有1萬年平均無故障時間的模塊,本章可以提供這方面的內容。第3章解釋了在構建高可用軟件時事務的重要意義。
第4~6章講述了事務的有關理論和使用。第4章詳細討論了把應用系統構造為事務的具體含義。重點討論了目前不能被扁平事務很好支持的計算類型。進行這些計算的應用需要事務概念的擴展和廣義性。第5章通過描述TP監控器的作用,解釋了面向事務的計算究竟對操作系統和其他低級別部件意味著什么。同時還解釋了事務程序如何與這些系統服務交互作用。第6章是面向程序設計人員的。它提供了很多程序控制結構和代碼片段來解釋事務型的遠程過程調用的工作原理、請求調度的處理,以及其他精妙之處。對位級(bit-level)事件不感興趣的讀者可略過本章的前半部分,直接從6.4節事務隊列的內容開始閱讀。
第7、8章介紹了并發的理論和實踐。事務處理系統將應用中的所有并行執行部分掩蓋起來,因此支持了ACID特性中的隔離性。第7章敘述了這些技術背后的理論,第8章則展示了如何用封鎖技術實現這一理論。
第9~12章介紹了事務管理和恢復技術,即與事務原子性和永久性有關的內容。第9章講述寫日志和歸檔的處理。第10章討論如何編寫事務型資源管理器,如數據庫系統或隊列管理器。它闡述了資源管理器如何與事務相結合,如何寫日志記錄、獲得鎖和參與事務的提交和回滾。書中給出了一個簡單的資源管理器(一位資源管理器)來具體展示這方面的技術。第11章介紹事務管理器,它具體負責確定事務的狀態和了解參與此事務的資源管理器的情況。本章給出了一個簡單事務管理器的具體實現—當然對具體細節不感興趣的讀者同樣可以略過這些內容。第12章是事務管理器所用到的高級概念和技術的匯總。
第13~15章討論一個相對獨立的內容:一個非常重要的資源管理器—事務型文件系統的實現。從裸金屬(磁盤)開始,討論空間管理問題,并詳細論述了系統中緩沖管理器的角色。接下來,介紹了在定長頁面中變長元組的組織,以及支持面向元組存取的所有文件組織方式。最后,第15章討論了關聯存取,主要介紹B樹及其在高并行環境下的實現問題。所有這些都以一種支持ACID特性的方式實現,即產生的文件、元組和存取路徑均是事務型對象。
.第16章概述事務處理范疇內許多商業系統的情況。我們試圖揭示每一系統的特征。這不是一個競爭性的比較,而是對每一系統優點的正面描述。
最后,附有一個關于事務處理術語的詞匯表。擁有如此大量的詞匯,這在一般的教材中是不常見的。然而,正如第5章引言所指出的,事務處理領域的術語是全面而定義完好的。因此詞匯表可以起到兩個目的:首先,若對某個術語不明確,可查詞匯表找到有關的解釋。其次,通過這種方式,詞匯表有助于促進本領域術語的統一。
大多數章包含了一節歷史評注,試圖說明事情的由來、一些思想的首次出處等。與計算機科學的許多其他領域不同,事務處理技術主要是由工業界研究機構和開發實驗室提出的。一些在商業產品中提出并實現的思想,是在若干年后被重新發現并作為科學成果加以發表的。在歷史評注中,我們盡我們所知,盡量包含來自兩方面的貢獻。
本書大部分后章還配有習題,小到簡單的內容復習題,大到一個學期項目。其中大部分題目還在章尾給出了答案。仿照唐納德·克努特的做法,對每一道題目有一個形如[節,級別]的修飾。“節”用于說明習題涉及哪一節的內容,“級別”用于指明習題的難度系數:
[10] 指可以在1分鐘時間完成的題目(用于檢查是否閱讀了書中的有關內容)。
[20] 指可以在15~20分鐘時間完成的題目。
[25] 指可以在1小時時間完成的題目。
[30] 指短的(程序設計)項目:可以在一天內完成。
[40] 指較大型的(程序設計)項目:可以在兩周時間完成。
另外,對難度超過[40]的題目,用[項目]標識。而對標有[討論]的題目,則需要讀者走出去,好好地調查研究一番。
本書原本的計劃是要包含SQL的實現和有關事務的應用設計。隨著寫作的推進,我們意識到已沒有空間和時間來討論這些內容。于是,正如現在所看到的,本書就是一本關于事務如何實現的書。Ceri和Pelagatti有很出色的書[1984]討論了高級別數據庫的問題(如SQL、規范化、優化以及一些事務管理的問題)。
有關本書的學習
本書主要面向高年級本科生、研究生和一些可能需要了解所用事務處理系統情況的專業程序員(如CICS/DB2用戶)或需要一本基本參考書的專業程序人員。
本書的內容在目前大學計算機科學的教學體系中沒有對應的科目。分門別類是現有課程結構的本質特征,而且至今還沒有標準的事務處理課程。然而,在本書的寫作過程中,各個階段的初稿已經被用于許多本科和研究生的課程中。我們認為我們所采用的寫作方法在計算機科學現存結構中是合適的。但我們希望,這一方法的出現將有助于消除現有分門別類的思想。以下是將本書用于各種課程的建議:
基本了解:第1章,2.7、4.1~4.2、5.1~5.3、5.5~5.7節,第16章。
事務處理導論:第1、2章,3.1~3.6節,第4、5章,6.4~6.5、7.1~7.6節,第9、10、16章。
數據庫系統:第1、4、7、10、13、14、15章。
分布式系統:第1、2、3、4、7、8、10、12、16章。
操作系統:第1、2、3、5、6、7、8、10、11、13、16章。
高級內容:在高級課程中,第1、3章可以略過,或者簡要地過一遍。另外,可以采用Tanenbaum的有關操作系統和計算機網絡的書,Ceri和 Pelagatti的分布數據庫的書,Oszu和Valduriez的分布數據庫原理的書,和Date的任何一本數據庫的書。
當然還可以想到許多其他的組合方式。對已經熟悉本領域內容的讀者,可以略過第1章、第2章;不過我們建議大家瀏覽一下這部分內容,以便了解本書用到的術語。
第3章可以跳過,但我們建議大家閱讀一下。事務乍看起來太顯而易見。然而第3章仔細地闡述了為什么事務是正確的異常處理模型和開發高可用系統的關鍵。這里討論的技術有助于更好地理解容錯在系統級的含義,并且它們可以隨時用于應用系統開發之中。
我們在敘述中盡量保持各章內容互不依賴。如果你閱讀了全書,就會發現各章間有一些重復內容。這保證了各章使用上的獨立性。
為使本書更便于教學上的使用,教師可以考慮通過Transarc公司的Encina大學項目獲取有關的軟件。Encina產品提供了在開放計算環境中的基于分布、標準的聯機事務處理。本書的很多內容可以使用Encina產品模塊家族,以課程設計的形式具體實驗。例如,分布事務管理、事務遠程過程調用、高級鎖和恢復模型、共享寫日志系統、面向記錄的資源管理器和事務監控器。
若你有充裕的時間,并對事務處理有足夠的興趣,不妨讀一下Bjork and Davies[1972;1973;1978]的論文。這些早期的論文開創了這一領域,以我們目前的觀察,閱讀這些論文會讓我們受益匪淺。事務的演進不像一種自然衰減過程,而更像一種激進方式,力圖減低難以管理的復雜性。閱讀這些早期的基本論文,你還會發現其中的預見還遠未成為現實。
結束語
正如致謝中指出的,本書的初稿歷經了兩年時間(1990~1991)的評閱和教學試用。這不僅改進了本書內容的表述,增加了準確性,而且改變了本書的總體設計。一些新的章節增加進來,而另一些內容則被刪掉了,書的厚度也增加了一倍。書的評審和熱烈的辯論也改變了材料的組織方式。我們兩個一個按自頂向下的方式開始寫作,而另一個采用自底向上的方式寫作。最后,我們兩個互相顛倒了各自的寫作方法。
即使如此,錯誤依然存在,為此我們沒有任何借口可以逃脫應有的責任。對發現本書的錯誤并不吝告知者,我們將不勝感激。請把意見寄給出版社轉交作者,或發電子郵件給Gray@microsoft.com。
致謝
本書得益于許多人士詳盡的批評和建議。我們衷心地感謝他們的指導。我們尤其要感激Frank Bamberger、Phil Bernstein、Noel Herbst、Bruce Lindsay、Dave Lomet、Dan Siewiorek、Nandit Soparkar、Kent Treiber和Laurel Wentworth等人,感謝他們對本書敘述重點和焦點的改進意見。更為珍貴的是來自Betty Salzberg和她所教班級的批評,它促使形成了本書的表述方式。謝謝大家。
Walker Cunningham,我們的負責文字的編者,仔細審閱了所有章節。他的不懈努力使本書顯得更為清晰。
我們的同事們對本書某些章節做出了很多重要的貢獻。Betty Salzberg建議需要第2章(術語)。Dan Siewiorek和Vic Vyssotsky對容錯一章傾注了大量心血。Bruce Lindsay和Harald Sammer對事務概念的寫作大有幫助。Phil Bernstein、Noel Herbst、Bruce Lindsay和Ron Obermarck 引起我們對事務管理的重新思考。Dave Lomet和Franco Putzolu對記錄和文件管理的章節貢獻頗多。Frank Bamberger、Elliot Moss、Don Slutz和Nandit Sopakar給本書提出了許多有價值的批評意見。
值得一提的是Charlie Davies,20年前開創本領域的先驅者。Charlie有關spheres of control(控制區域)的工作鮮為人知。他的論文有些晦澀,但所有與他接觸過的人無不為他的遠見卓識所折服。從事這一領域研究的人們仍在致力于解決他所預見到的問題。第4章以更現代的詞匯闡述了他的這一思想。
事務處理是一個實踐引導理論的研究領域。通常在商業系統實現了某些思想很久以后,該思想才會在學術界出現。類似的事情不僅讓人想起當年伽利略向威尼斯商人宣稱發明了望遠鏡,而此時市井上批發商們正在銷售著批量生產的荷蘭望遠鏡。
貫穿本書,我們一直面臨著兩難的選擇。是把功勞歸于首先公開發表該思想的人們?抑或應該優先考慮在產品中最早開發和實現該思想的人們?學術界的傳統和美國的專利法律將優先權賦予首先發表者。我們試圖兩者并重。在每一章歷史評注的敘述中,對來自工業界和學術界的思想貢獻,我們盡量做到不偏不倚。也許這樣的討論根本沒有實際意義;實現者們要的不是學術的榮譽,他們要的是金錢。
Franco Putzolu(一個實現者)對本領域,尤其是作者有深刻的影響。Franco從沒有寫過一篇論文,也沒有一項專利,但他的思想和代碼卻是System R、SQL/DS、DB2、Allbase和NonStop SQL等系統的核心。這些設計被他人廣泛地使用,同樣也用在本書中。Franco Putzolu值得本書對他賦予如此的殊榮。
Bruce Spatz(我們的出版商)在有關本書的側重點方面給予我們有益的指導。他還組織對本書進行多次的審閱,安排了課堂測試,而且在我們最需要的時候給予鼓勵。我們還要感謝我們的項目經理,專業書中心的Jennifer Ballentine和我們的文字編輯Jeanne Thieme,對本書的巨大幫助。
Andreas的學生們對本書的很多方面給予幫助。他們閱讀了本書初稿,并用于教學,嘗試做其中的習題,研究有關參考文獻,等等。而且,由于他們的導師不斷面臨“馬上交稿”的壓力而經常缺席,這意味著學生們必須更多地要靠自己的努力。
Gabriele Ziegler是Andreas的秘書,在此需特別感謝她在Andreas忙于寫書期間安排處理有關的事務。當Andreas忙于“馬上交稿”而無暇理會其他人的時候,她都要出面周旋。
Christiane Reuter幾乎寫完了有關應用設計的一章,但最后還是放棄了。然而,她卻照料了在Ripa第一次處于長期寫作狀態中的作者—由于要應付當地能源和可怕氣候,這可是一項不簡單的任務。此外,她還要忍受多年的熬夜和沒有周末的折磨。
Tandem計算機公司和DEC公司給了非常慷慨的支持。
最后感謝所有鼓勵我們前行的人們,感謝帶給我們愉悅的人們,感謝能寬容我們的困擾和情緒波動的人們。
Jim Gray
Andreas Reuter
(斯圖加特大學)
[b][size=large]中文版序[/size][/b]
本書的基本前提在于,事務概念是分布式計算的一個重要抽象。在某一層次上實現了事務,那么所有更高的層次上會有一個簡化的失敗語義(要么全做,要么全不做),并且錯誤處理也會簡單的多。
十年前當本書初次面世時,這是一個基本的觀點。自此以后,因特網蓬勃發展,分布式計算在CORBA、DCOM和現在的Web Service的支持下,變得更為切實可行。TP監控器已經被Web服務器和對象請求代理所取代。數據庫系統也已經成熟多了。
今天我們看到,許多技術都已接受了這一觀點。事務技術被廣泛用于操作系統、事務型文件系統,并且事務管理器被加入到了大多數的操作系統中。由于事務技術已經成熟,所以事務型資源管理器(如隊列管理器、工作流系統、持久對象系統和主存數據庫系統等)日益推廣流行。
本書中的一些內容已經過時了—甚至是作廢了—但其核心概念和技術已從數據庫系統擴展到了分布式計算的范疇。
我和Andreas Reuter感謝譯者的辛勤工作。中文,作為更為簡潔的語言,會使本書更薄些(也更輕了),中文版還會使十多億人有機會閱讀本書。我希望本書對各位是有價值和有幫助的。
Jim Gray
微軟研究院
2002.10
[b][size=large]序[/size][/b]
企業、政府、科學、文化等領域的活動,正在變得越來越依賴于計算機信息資源。隨著計算機系統獲取和維護的信息量和種類日益增多,如何使用、管理和保護這些信息的技術對人類和現代工業社會變得至關重要。
事務處理技術是有效管理和使用計算機信息資源的關鍵。
事務處理涵蓋了對所存儲的信息和應用程序加以管理兩方面的技術,其中應用程序負責對信息的解釋和具體操作。從數據庫恢復和并發控制,到事務監控器,負責初始化和控制應用的執行。這些事務處理技術為關鍵信息資源的管理和保護提供了必要的機制和措施,而這些關鍵信息資源其實已成為商業、科學、文化活動的基礎。
為使日益劇增的計算機信息有用,要求它們必須能夠準確反映現實世界的情況,并能保證應用程序可獲得它們。通常,使用所存儲的信息是指訪問和修改有關的數據,這些數據集中描述或刻畫了現實世界中的某些現象或活動的狀態和演化。由于許多數據要一起被訪問和修改以便正確反映現實世界,因此必須保證相關數據的一致性。任何對相關數據修改的中斷,或對相關數據訪問或修改的交錯,都會造成數據的不一致性。
保證數據一致性的關鍵是要明確數據訪問和更新的序列。這一序列稱為事務。事務處理技術就是要確保一個事務要么完整地執行,要么根本不執行,并保證并發執行的事務彼此互不干擾,如同在隔離執行一樣。這一技術的意義尤其在于,在一些復雜情況下上述保證仍能得到支持,如計算機部件發生故障、數據分布在不同計算機上或不同事務的交叉或并行執行等。
過去25年中,企業和大學的實驗室在事務處理技術方面付出了巨大的努力,已使得該技術可以保證事務的“all-or-nothing”(要么全做,要么全不做)執行,以及并發事務的隔離性。本書第一次全面介紹了事務處理系統的技術和方法,用來控制和保護事務處理系統管理的有價值的信息資源。作者詳細描述了商品化的和實驗性的事務處理系統的技術現狀。重點論證了這些技術的有效性和高效性。詳細解釋了為什么要面對這些問題以及如何解決這些問題,所有這些使得本書不僅對求知的學生,而且對系統開發人員都是十分有益的。
作者Jim Gray博士和Andreas Reuter教授,在商品化和實驗性事務處理系統的實現技術方面,加起來已有五十多年的直接經驗。他們對事務處理技術做出了巨大的貢獻,并因他們的學術成就而享譽世界。本書既是他們對事務處理問題深刻理解的結晶,也是對大部分行之有效的事務處理實現技術的難得的評價。作者具有的對基本概念和使用方法的辨識能力,給讀者理解事務處理系統的問題和技術,提供了堅實和實用的基礎。
.本書覆蓋了事務處理技術的所有方面。開始的幾章為讀者介紹了事務概念和事務執行的計算環境的基本知識,其中給出了有關計算機部件故障的重要假設,即事務處理系統必須對故障部件容錯。書中闡述了事務處理監控器的作用。事務處理監控器主要控制應用程序和所提供功能的激活和執行。這為討論并發控制和恢復技術打下了基礎。事務隔離性的討論覆蓋了并發控制問題,它涉及了從硬件層到記錄和索引的隔離語義的各方面問題。書中詳細討論了故障情況下重要而復雜的事務恢復技術。從記錄管理到分布提交協議,對所需要的用于保證事務的“要么全做,要么全不做”執行和數據永久性的恢復技術詳加闡述。其后,介紹了將事務恢復技術和隔離技術用于記錄級存儲和關聯索引的設計與實現。從這些章中,數據庫系統方面的學生和開發人員都可以獲得有用的信息。本書最后,從商業和學術兩個方面對事務處理系統加以綜述。
貫穿全書,作者對基本問題給出了深入細致的討論,對已證明行之有效的技術給出了詳細具體的描述。對概念方面的內容,輔以一些仔細設計的圖表加以說明。對技術方面的內容,則給出代碼片段,有效提高了讀者對實現問題的認識。
本書既綜合覆蓋了事務處理技術,又詳細描述了相關問題和算法,對學生是很好的教材,對專業人士則是資源寶庫。事務處理技術對工業社會的信息管理需求十分重要,這需要人們對該技術深入理解和廣泛應用。對于即將應用和拓展事務處理概念和技術的人士,本書可以充當這方面的指南和參考書。
Bruce Lindsay
IBM Almaden Research Center
圣荷塞,加利福尼亞
總結
以上是生活随笔為你收集整理的事务处理:概念与技术的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 第八章 SQL修改数据库
- 下一篇: C++(电子)PPT例6、例7作业提交
