稱某物大或快時,立刻要面對一個問題:“和什麼比?”小公司所謂的“大型”數據庫面對每年 28 PB 的速度增長的國家級數據儲存庫而言是那麼的微不足道,為電子商務站點處理事務的所謂“快速”數據庫,與用於執行股市交易、訪問時間以毫秒計的數據庫相比不值一提。
但是,即使您公司無意追求最大或最快的數據庫,管理那種數據庫的一些經驗教訓仍適用於您的環境。可以肯定,這一領域中的趨勢必將流向各種規模的數據庫。
超大的定義
隨著創建的數據量不斷增長,為了容納這些數據,公共和企業數據庫也在不斷擴張。就在 4 年前,WinterCorp 評定世界最大的數據庫是超過 100 TB 的數據倉庫。在這項評選的 10 年歷史當中,Yahoo! 的一個數據庫是首個超過 100 TB 的系統。
但是,如今要存儲多得多的數字信息,“超大”數據庫的定義是什麼?沒有標准的定義,單純的大小不再是唯一的評判標准,而只是一個因素。一種比較可行的定義來自 Robert Hollebeek 博士,他是賓西法尼亞大學的物理學教授,與人共創了 National Scalable Cluster Project,多次因在分布式集群系統和數據挖掘方面的工作獲得國際大獎。Hollebeek 說,在 5 年前,一個 TB 級數據庫就可以算是“超大”數據庫,但是,如今的數據庫必須是 PB 級的才可以稱之為超大。“另一種定義是,如果一個數據庫的索引即使是超級計算機或計算機集群的 TB 級物理內存都無法容納,那麼可以稱之為超大數據庫,”他說。需要那麼多索引的數據庫的確稱得上超大,這種數據庫的性能和數據庫管理是個很大的問題。
Hollebeek 說,當存放數據所需的硬件總量已成問題時,這樣的數據庫也可稱之為超大數據庫:“當您有數千個磁盤單元,或者放並行計算機的架子擺滿整個房間時,就變得難以管理了。”
Confederacion Espanola de Cajas de Ahorros(CECA)是西班牙儲蓄銀行聯合會,它的 IBM Information Champion Manuel Gomez BurrIEl 也認為,易管理性可以將通常意義的“大型”數據與超大數據庫區分開來。“通常的管理任務在規定的時間內已經無法完成,” Gomez 說道。恢復一個損壞的數據庫需要數小時的時間,然而可用的時間只有數分鐘。性能也會受影響,因為數據庫實在太大,數據庫中的任何有效部分都無法裝入內存中的緩存。僅僅是響應應用程序對數據的請求就會帶來難以接受的 CPU 開銷。
數據庫的肖像
仔細研究一個非常大的數據庫,可以從中得出一些教訓,這些教訓同樣適用於其他大的或不那麼大的數據庫。Hollebeek 是 National Digital Mammography Archive(NDMA)的技術主管,NDMA 是為容納一個以每年 28 PB 的速度增長的數據庫而設計的系統。NDMA 由美國國立衛生研究院(National Institutes of Health)資助,它建立了一個分布式系統網格,用於醫療記錄和圖像的存儲。該系統存儲乳房攝影檢查、MRI 掃描等組成一個“病例”的相關文件,每個病例可能占 1 GB,而這樣的病例有數百萬個。除了解決存儲和訪問大量數據的問題外,NDMA 還必須處理與存儲在分布在不同地理位置的系統上的密封式(siloed)數據相關的問題——這是全球企業都存在的一個相同的問題。為了與四家參與該項目的研究醫院建立連接,NDMA 在每家醫院安裝了加密的、安全的線路和“接入點(point of presence)”,它們是用於加密文件和使用專用網絡協議有效發送大塊數據的硬件。
“我們的項目規模非常大,而且不能喪失任何醫療數據。我們需要穩定的、高度可靠的技術,這種技術還必須真正快速,並且可以並行,因為系統的結構基於構建並行計算機集群。” Hollebeek 說,“它必須能夠容錯,因為索引表崩潰或消失是不可容忍的。” NDMA 使用了 IBM DB2 Parallel Edition 軟件來存儲數據庫索引。NDMA 將實際圖像數據存儲在並行磁盤矩陣上的平面文件數據庫中,由那裡用於操作系統(此處為 Linux)的本地文件系統管理。
來自 NDMA 的教訓
根據他在 NDMA 方面的工作經驗,Hollebeek 提出了關於處理通過廣域網(WAN)連接的超大數據庫的幾點建議:
注意通過網絡(無論是 Internet 還是私有網)發送大量數據的問題。要尋找高效地發送大量數據的方法,例如在發送和接收位置安裝接入點,或者使用發送大型(多 MB)數據塊的協議。
不要改變接收的數據的格式。無損的壓縮雖好,但是為了在大型數據庫中節省少量的空間而重新格式化和存儲接收的數據,會導致更多問題,實屬不值。例如,對於醫療數據,如果在更改格式時出錯,並導致數據不可用,那麼就是特別嚴重的問題。
一旦索引表再也無法裝入內存,數據庫的性能就會直線下降,所以應該盡量升級內存,以便存放那些表。然後,利用數據中的任何並行結構,通過聚集有效地增加容量。如果不行,則為索引再建立索引。
超快的定義
和超大的定義一樣,超快的定義也隨著技術不斷確立新的極限而改變。 “我們通常以每秒事務量之類的指標來度量數據庫的速度,也許每秒一百萬個事務算得上快。但是,隨著新技術的誕生,術語“事務”定義的只是一種非常普通的數據庫訪問,”Application Development and Deployment IDC 研究副總裁 Carl Olofson 說,“在將來,還會有其他類型的、使數據庫與內存之間的差別變得模糊的數據庫訪問。到那時,pull 數據可能需要某種重定向的內存訪問,而不是真正綁定到數據庫,然後開始一個事務。顯然那樣會非常快。” Olofson 還從更廣泛的意義上定義“快”:“任何系統的目標都是確保數據庫不拖累應用程序,因此可以以應用程序運行的速度返回數據。”
Gomez 以類似的方式定義超快:“快到足以按照與客戶協定的服務品質協議(SLA)交付信息。”他還補充道:“最快的數據庫能夠盡可能直接從內存中訪問信息塊。我們的一個支付系統應用程序使用具有 Fast Path Solution 和企業存儲子系統的 IMS,以提供每個事務少於 20 毫秒的響應時間的速度,為獲取客戶端所需信息,它最多訪問 14 個數據庫。”
一秒的延時太長了
自動櫃員機(ATM)使用的財務系統雖然稱得上快,但是現在也落伍了。“最近,您可能需要等待一秒左右才能看到賬戶余額,”Olofson 說,“過去來說還算很好,但是現在只能算一般。”如今,當專家談論高速數據庫交互時,他們指的是通信系統,在此系統中,當連接一個呼叫時,一個系統立即查找客戶的賬戶,確定客戶的服務類型,使系統知道如何路由該呼叫,提供哪些可用特性,這些都是在無線環境中完成的,而且任何人的賬戶隨時會改變。
另一種需要超快速度的應用程序是金融服務行業由投資組合驅動的算法交易。“一家公司可能有數百個賬戶,每個賬戶有一個稍微不同的投資組合,因此每個賬戶有不同的規則來決定采取哪種交易,”Olofson 說,“當收到價格時,必須在幾毫秒內應用這些規則,系統能否提供這種速度決定著管理這些賬戶的成敗。”
如此超快的速度需要有高度響應的後端數據庫,這通常需要分層的系統或數據庫。在很多情況下,後端數據庫實際上是大型主機數據庫,例如 IBM 基於大型主機的分層 DBMS IMS。在這些分層解決方案中,有一個內存中的數據庫緩存功能,作為後端數據庫的前端。最先投資那些分層解決方案的是那些需要超快系統的客戶。
即將到來的速度提升技術
對速度的需求從未中止,供應商繼續開發新的方式來加快數據庫性能。一種逐漸流行的策略是解決數據傳輸鏈上通常最慢的部分:硬盤驅動器。諸如 IBM solidDB 之類的內存中緩存解決方案將數據庫從相對較慢的硬盤驅動器轉移到相對較快的 RAM,大大提升響應速度。要更深入了解 solidDB,請參閱本期的“solidDB 與速度的奧秘”。
另一種有希望的解決方案是固態硬盤(solid-state drive,SSD)或閃存(Flash memory),它是主存與磁盤存儲器之間的中間層,但是當成本降下來的時候可以成為數據庫的主要存儲介質。(參閱本期的“釋放用於 DB2 工作負載的固態硬盤的價值”關於如何用 SSD 最大化 DB2 性能的討論。)
除了硬件從以磁盤為中心轉移到以內存和處理器為中心的數據管理外,一些用於解決不同數據庫工作負載的靈活的技術也在開發中。傳統方式將數據存儲為記錄,成為表中的行,而新的數據管理器將使用索引矩陣指向的 columnar 數據庫和數據池,為內部存儲提供更高程度的靈活性。從訪問數據的應用程序的角度看,那樣的儲存庫與傳統的關系數據庫一樣,但是它可以擴展,從而像對象數據庫、XML 數據庫、多值數據庫或多維數據庫那樣工作。
最後,一些開發人員正在采用一種稱作“流處理(stream processing)”的完全不同的方法,該方法在收集數據的過程中就處理和分析數據,而不是等到數據完全停留在數據庫中之後。IBM InfoSphere Streams 正是采用這種方法,從而支持監視同時發生的數據流,並提供幾乎即時的分析,這種分析將隨著新數據的到來不斷精化。要更仔細地研究現實中正在使用的 InfoSphere Streams,請參閱 2009 年 IBM Data Management 第 3 期中的“更加智能:提高 Galway Bay 的 IQ”。
顯然,在超大和超快數據庫領域,客戶需要不斷推動技術發展。無論需要存儲和檢索多少數據,速度需要多快,很多公司都在開發新的產品,使之成為可能。就像語言、時尚和藝術那樣,今天所謂的極限明日將變得平庸。