雷舜東,吳幫華,黃海瑩,李玉明,張 紅
(四川大學華西第二醫院 a.信息管理部,b.后勤管理部,四川 成都 610041)
關系型數據庫是指采用了關系模型來組織數據的數據庫。一個關系型數據庫就是由二維表及其之間的聯系組成的一個數據組織。關系模型是1970年由IBM的研究員E.F.Codd博士首先提出,在之后的幾十年中,關系模型的概念得一了充分的發展并逐漸成為數據庫架構的主流模型。醫院信息管理系統采用的數據庫主要有 SQL Server、Oracle、Sybase和DB2等主流數據庫不同版本。這些數據庫均為關系型數據庫,其應用在推進醫院信息系統的發展方面功不可沒,然而隨著醫院信息系統的進一步發展,尤其是臨床醫療信息系統的深入應用,使得關系型數據庫在處理具有多維特征的醫療數據時顯得力不從心,而Caché數據庫在這個方面有明顯的優勢。
二十多年前,關系型數據庫被譽為一項偉大的創新。關系型數據庫用統一的數據結構取代了以前單一的、結構不一的數據文件,將數據存儲在表格中。關系型數據庫是如此的成功,以致查詢語言(SQL)成為了訪問數據庫的一個通用標準[1,5]。然而,作為一種技術,有其生命周期和局限性。該技術的缺點使其在當今世界的適應性大大降低,主要表現在以下幾方面:快速的開發程序,程序復雜性不斷增加,信息系統需要不斷提高,這些都已超出了關系型技術的能力。許多要求高性能和高擴展能力的關鍵應用從來沒有遷移到關系型數據庫上,現在即使很簡單的應用也開始觸及到傳統關系型技術的極限。關系型數據庫和當今開發技術的“不匹配阻力”已經成為了一個嚴重的問題,它使得開發過程更加復雜,開發成本增加,失敗概率大大提高[2]。盡管表格結構的簡潔可以支持強大的SQL,但現實世界的數據很難分解為這種簡單的行列結構。結果就是產生了大量的表,表和表之間的關系就變得很難記憶和表達。
在醫療領域,醫療活動的復雜性與多樣性表現為環節眾多、環環相扣,含幾個主要的環節,每個主要的環節中又包含若干個子環節,子環節中嵌套著下一層子環節。為滿足日后臨床需求進一步擴展細化,環節的層次不能固定[3]。其次;末端環節中所包含的醫療項目數據的種類也不能固定,也必須具有擴展性,這樣存儲機制必須具備“樹枝、樹干”的層次,并具有高擴展性。顯然,當今的主流關系型數據庫的二維存儲結構不能滿足醫療行業特殊數據存儲的這些需求。
在世界醫療衛生的相關領域,Caché成為首選的數據庫,70%的美國醫院使用Caché數據庫,世界上最好的電子病歷、最大的HIS系統、最優的LIS系統都采用 Caché作為數據庫[2]。這些成功應用Cache數據庫的實例都充分說明其在醫療領域應用的顯著優勢。
Caché是后關系型數據庫的領導者,在全世界的醫療領域處于領先地位。“后關系”這個術語是用來將Caché與傳統的關系型數據庫區分出來。與傳統的關系數據庫不同的是,Caché是以多維結構對數據進行存儲,這種結構可以處理復雜的數據,并能更加快速地存取數據。
2.1 Caché數據庫的多維存儲結構適合醫療數據的存儲 Caché數據庫的多維存儲結構與醫療數據的存儲需求——樹狀結構一致。以屈光手術為例(見圖1),患者的全部屈光手術治療為一個大環節,這個環節下包含著多次手術治療過程的子環節,每一個子環節下包含:病史采集、術前檢查、綜合評估和處理、手術計劃、手術記錄、術后用藥及處理、術后復查等環節[2]。其中的手術記錄環節可能包括手術切削參數、手術方式等子環節。最末端的環節如手術切削參數將包括多個記錄項目,如矯正度數、光學區直徑等。矯正度數的數據格式與光學區直徑的數據格式不一樣。這種數據結構形式可以理解為樹狀結構,其樹干和樹枝代表環節的層次,枝頭掛著的一串果實則代表每一項醫療數據。

圖1 屈光手術治療樹狀結構圖
在Caché數據庫中采用路徑法,僅使用2個Global節點變量就存儲了上面例子的所有層次信息:
^List(“術前檢查”)=<<$LB(“裸眼遠視力”,“裸眼近視力”,“常用戴鏡視力”,“電腦驗光”,“角膜地形圖”,“檢影驗光”,“主覺驗光”,“優勢眼”,“眼位及運動”,“眼瞼及睫毛”,“結膜”,“角膜”,“前房及房角”,“虹膜”,“瞳孔”,“晶體”,“眼壓”,“玻璃體”,“眼底”,“角膜厚度”,“眼軸長度”,“特殊檢查”)>>
^List(“術前檢查”,“特殊檢查”)=<<$LB(“淚液功能”,“像差”,“視野”,“調節功能”,“對比敏感度”)>>
^Tree(“術前檢查”,“裸眼遠視力”)=Physical I-tems.Vision
^Tree(“術前檢查”,“裸眼近視力”)=Physical I-tems.Vision
^Tree(“術前檢查”,“特殊檢查”,“淚液功能”)=Physical Items.Tear Function
^Tree(“術前檢查”,“特殊檢查”,“像差”)=PhysicalItems.Aberration
下面解釋一下以上2個Global節點變量的存儲結構,多維數組Global是Caché數據庫的核心存儲機制,是其一切數據存儲的基礎,所有數據存取都是以Global的形式進行存儲。在Caché環境中,可以把Global理解為是一種數據類型。^Global變量維度是無限的,其下標和值可允許數字或字符(含中文),其長度僅受限于數據庫的存儲空間。在^List節點里存儲了所有的路徑信息(層次信息),可歷遍整個樹狀結構,也可根據指定的下標進行快速定位。^Tree節點相當于連接“果實”的小枝,其下標由絕對路徑構成,保存的值為類名稱,即指向某一具體醫療數據項目的類名稱。由于Caché專門針對多維數組的存取進行了優化,因此路徑信息的檢索、存取速度非??臁4送?,多維數組的變量值更新和維度擴充的方便性,也就決定了醫院信息系統比較良好的層次結構的擴展性。
2.2 以Caché為后臺數據庫的系統其執行效率高SQL數據訪問就是使用一種標準的語言查詢各種類型的數據。SQL數據訪問的工作方式是在簡單的、標準化的格式(由行和列組成的兩維表)中瀏覽所有數據。盡管這種簡單的數據模型支持了這種強大的查詢語言,但卻要付出昂貴的代價。由于現實世界的數據關系復雜,因此現實數據并不能自然地表示成為簡單的行和列,所以現實數據往往被分解成多個表。這樣即使是進行一個簡單的任務,也要對這些表進行連接操作。這樣就導致了兩個問題:①由于需要連接多個表(常常是復雜的外連接),查詢語句就很難寫;②當關系型數據庫需要處理復雜數據時,處理任務就是一項非常巨大的工程。Caché使用有效的多維數據引擎,多維數據引擎能夠對復雜的現實數據進行直觀、有效的建模[4]。與關系型系統不同的是,Caché在處理事務的時候不需要從多個表中集成數據,消除了伴隨事務處理所需要的表連接,所以與關系型數據庫相比,SQL的性能提高了20倍。Caché數據庫中內置的Caché ObjectScript腳本語言,可以直接訪問多維數據結構,這樣可以獲得最高的性能和最好的存儲利用率。應用Caché,單個的事務處理運行得更快,更多事務處理能夠同時并發處理。
數據庫的性能極大地依賴于索引的創建,在查詢數據庫時這些索引經常使用。眾多數據庫都使用索引,然而Caché獨一無二地提供了事務型位圖索引。關系型數據庫中的傳統位圖索引受兩個問題的困擾:①當要更新關系型數據庫時,它將變得很慢;②它可能會占據太多的存儲空間[4]。而Caché中的事務型位圖索引可以利用多維數據結構來消除這兩個問題。這樣一來更新這些位圖要比更新傳統的索引更快。并且他們利用復雜的壓縮技術顯著地降低了所需的存儲空間。結果是:在一個在線事務處理數據庫中搜索成百萬條記錄時,不到一秒鐘。正是由于Caché中面向對象的特性和其獨特的索引技術適合醫療領域頻繁的查詢搜索和大量的并發事務,使其在整個醫療信息系統的執行效率高。
2.3 適應目前面向對象開發技術的發展趨勢 對象編程和對象數據庫是實際工作中為了模擬復雜的大腦活動而產生的一種技術。所以,程序應該不僅能夠處理復雜行為而且能夠隱藏其復雜性,這是當今頂尖應用程序所需的兩大特征。在對象技術中,數據的復雜性被封裝在對象中,數據訪問通過一個簡單統一的接口[4]。關系技術雖然也提供一個簡單統一的接口,但是,由于關系技術不能處理現實數據的復雜性,所以用戶或者程序員必須處理這種復雜性。Caché數據庫是面向對象的數據庫,同時支持對象擴展的SQL查詢語言。跟關系表不一樣,Caché數據庫中的對象把數據和代碼捆綁在一起。例如,一個發票對象可以保存有數據(如發票編號和總金額)同時具有執行某種行為的代碼(如print()),這樣就完全與面向對象開發技術相吻合。在Caché數據庫中直觀的數據建模對象技術使得開發者以簡單和真實的方法思考和使用信息,甚至是十分復雜的信息,就提高了應用程序開發的效率。Caché完全支持面向對象的編程方案,包括封裝,嵌入對象,多重繼承,多態等。內嵌的Caché腳本語言可以直接操縱對象,Caché也可以把Caché類轉化為 Java,EJB,COM,NET,C++類,并且提供了與對象建模工具(如Rational Rose)和網頁設計工具(如Dreamweaver)的高效聯接。Caché數據庫的這些面向對象的特點和與當今流行的面向對象開發工具兼容使得開發者能夠非??焖俚膭摻ɑ贑aché后關系型數據庫的應用。Caché數據庫以其優秀的性能及后關系型數據庫的特點廣泛應用于醫療行業,更大的優勢在于其自帶的Web Service為數據在不同的信息系統間交互,提供了可靠的性能及保障,其快速、便捷的接口開發,從而實現對異構系統的有力支持[6]。
2.4 使用Caché數據庫能夠繼續延用現存的技術和應用程序 Caché的關系網關能夠使在Caché中產生的SQL查詢導入到其他關系型數據庫中進行處理。通過使用網關,Caché應用系統能夠提取和更新存儲在多數關系型數據庫中的數據。另外,如果Caché數據庫類是使用CachéSQLStorage編寫的,網關能夠允許Caché應用系統透明地訪問關系型數據庫,這樣程序員能夠繼續延用現存的關系型數據庫系統,逐步引入對象技術[4]。如果應用程序直接訪問Caché這個后關系型數據庫,它將運行得更快,且更具有擴展性。同時許多基于SQL的應用程序能夠不做任何改變而直接在Caché上運行——尤其那些用獨立于數據庫的工具編寫的應用程序。在醫院有多個信息系統存在的情況下,使用Caché數據庫技術,能讓這些系統共存,而不必將醫院的既有系統推倒重來。
2.5 使用Caché數據庫能降低成本及易于擴展與大小相同的關系型應用相比,基于Caché的應用對硬件要求很低,系統管理和操作非常簡單。更快更具擴展性,Caché虛擬機技術能夠直接訪問數據庫,這樣使得應用程序能夠運行得更加快速,并且應用程序在低性能的硬件上也能夠擴展到上萬個用戶,這樣就不必象關系型數據庫在面對眾多客戶端的情況下,對數據庫服務器硬件要求極高,從而為用戶節約大量成本。每個Caché過程使用“命名空間”來訪問數據庫。通常,除了一些系統信息,命名空間的所有數據存儲在一個單一的數據庫中。命名空間是一個邏輯圖,這個圖把多維global數組和代碼映射到數據庫,所以如果一個數據庫從一個磁盤移動到另一個磁盤或者從一個計算機移動到另一個計算機,只要命名空間做一下更新就可以了,應用程序本身不需要更新[4]。命名空間支持靈活的結構,允許任意映射,通常一個命名空間是幾個數據庫內容的映射,也可以包括其他計算機上的數據庫,這對以后數據庫的擴展極其方便。Caché的多維數據模型允許基于Caché的應用程序擴展到數千個客戶端,而不影響其高性能。這是因為相對關系型模型,多維數據模型的數據庫的大小和復雜性并不顯著地影響數據的訪問。Caché數據庫對硬件要求不高及極易擴展的特點降低了醫院的成本和對醫院歷史數據在在線保存及查詢提供了極大的方便?;诤箨P系型數據庫Cache的HIS具有速度快、穩定性強、維護方便且成本低的優點,較基于關系型數據庫的系統具有廣泛的應用價值。
目前,國內許多醫院都建立了自己的醫院信息管理系統,系統的正常運行與進一步擴展依賴于具有高性能、高擴展性的數據庫?;诤箨P系型數據庫Cache的HIS具有速度快、穩定性強、維護方便且成本低的優點,較基于關系型數據庫的系統具有廣泛的應用價值[7]。鑒于國外醫療行業使用Caché數據庫的情況,及Caché數據庫相對于關系型數據庫在醫療領域的優勢,Caché數據庫在我國醫院信息化建設和管理中有巨大的應用前景,對提高醫療服務水平、提高醫院效率、降低成本、縮短醫院信息系統開發周期、提高醫院信息系統的使用方便性和減少日后的維護工作量,提高醫院競爭能力將產生重要影響。
[1]黃維通.SQL Server 2000簡明教程[M].北京:清華大學出版社,2002.
[2]王曉幸,木霄挺,楊杰.基于Caché數據庫的電子病歷存儲結構設計[EB/OL].http://www.intersystems.cn/cache/analysts/cache_ehr.html,2010.
[3]杜布爾,耿希晨.從對臨床癥狀的屬性解析探索醫學數字化[J].中華醫院管理雜志,21(5):548-549.
[4]Inter Systems公司.Caché技術手冊[P].Inter Systems公司北京代表處,2006.
[5]何玉潔,黃婷兒.數據庫設計教程[M].北京:機械工業出版社,2005.
[6]宗寧.Caché數據庫中Web Service的開發與應用[J].電腦編程技巧與維護,2010,22(1):43-44.
[7]任喜偉,黎明和,陳長明.采用Cache的三層結構 HIS的研究[J].現代制造工程,2010,1(1):23-26.
[8]韓亮,戴耕武,潘寧,等.皮膚外科患者信息管理系統的建立與應用[J].實用醫院臨床雜志,2008,5(1):98-99.