一位資深DBA的十年職業之路
針對目前中小企業IT系統選型缺乏強大獎金和雄厚技術支持的情況,我們采訪了某數據管理中心高級工程師盧濤(網名:〇〇)。盧濤向我們介紹了他十年的數據庫管理工作經歷,希望這個經歷的介紹能對企業在部署數據庫有一個借鑒的經驗,也希望給剛入行的DBA一個學習的榜樣。
盧濤介紹說,在工作當中***接觸數據庫要上溯到上世紀90年代中期,那時,計算機還是以單機為主,應用的主要數據庫是FoxPro,這雖然也是一款支持多用戶的關系型數據庫產品,但主要還是限于單機使用。使用數據庫的主要方式是編寫和運行過程式的,包括界面和業務邏輯的prg程序訪問后臺的表,用到的數據庫功能很有限,數據庫管理也僅限于數據庫表文件和程序文件的備份。
大約在2001年,***接觸了Oracle 8i數據庫,其實,單位使用這種數據庫是比這個時間更早的,但只有少數Unix服務器使用,還沒有推廣到一般的應用。那時基本上是雙軌運行,大型數據分析處理用Oracle,編寫PL/SQL程序或用Pro*C程序處理業務邏輯,小型數據采集和加工用其他小型數據庫,比如MS Access、Visual FoxPro等,還有自行設計的Visual C++編寫的用類數據庫的文件存儲和處理保表的系統。
2004年,***次將C/S架構引入到數據采集軟件之中,軟件不必和小型數據庫管理系統捆綁,數據庫采用MySQL 4,從現在的標準去看,那是一個缺少很多基本功能的數據庫,比如沒有定點小數數值類型,SQL語句不支持子查詢,因此給開發工作帶了很多困難,基本上業務邏輯還是通過C++應用程序來實現,只不過可以通過網絡并發訪問數據庫罷了。在數據分析階段仍然采用Unix上的Oracle 9i數據庫,因為它在大數據量處理上,性能比MySQL具有很大的優勢,功能也強大很多。利用OEM工具可以進行數據庫的管理和性能診斷,數據庫管理使用 Unix的后臺定時任務crontab來執行邏輯導出到磁盤,定期備份到磁帶。由于應用程序的默認口令比較簡單,為了防止未經授權的用戶利用該用戶直接訪問數據庫,利用觸發器和SQL net配置文件限制登錄IP,保證數據庫安全。
2007年,將2004年的系統進行了升級改造,數據采集和分析的數據庫同時支持MySQL 5、Oracle和MS SQL Server 2005,軟件改為符合j2ee標準的3層C/S架構,中間層使用Tomcat,由于要兼顧不同數據的特點,應用軟件專門虛擬了一層統一的數據訪問層,自動根據數據庫類別映射到不同的功能,比如數據導入,SQL Server用bcp實現,Oracle調用SQL Loader, MySQL則采用load data in file方法,有些數據庫不支持的功能,就用等價的辦法替代,比如用表連接代替子查詢。在數據分析階段采用Unix上的Oracle 10g數據庫,充分利用數據庫的功能,比如擴展的group by、分區、數據泵導入導出使得軟件的性能得到很大提高。支持多種數據庫平臺給開發和測試工作帶來了很大的工作量和維護難度,因為任何一個功能必須考慮各種數據庫的特性,否則就會有問題,而不同數據庫的處理機制又有較大區別。
2008年,組織另外一個團隊開發了一套數據采集和分析報表系統,采用3層B/S架構,不再支持多種數據庫平臺。對數據量較少的用戶,用Oracle XE數據庫,除了一些高級功能,如并行、分區等外,絕大多數功能都和Oracle 10個沒有區別,極大地方便了將來數據量擴大時,升級到Oracle標準版或企業版。由于新開發隊伍對Oracle數據庫的了解不夠,采用了一些不合理的表結構設計和應用程序架構,應用程序承擔了大多數數據處理任務,導致不能充分發揮數據庫的功能,軟件性能不是很高,但仍然可以完成任務。數據庫管理通過 EM頁面,無需安裝客戶端,便于隨時隨地監控數據庫的狀況。
2010年,在2008年的系統進行了升級改造,一方面針對數據分析功能修改了算法,充分利用數據庫的功能,另一方面,利用多個應用服務器合作完成較大的任務,充分利用硬件CPU和內存資源。使得產品性能有比較大的提升。為了提高并發訪問能力和負載均衡,使用了F5設備。
目前,2010年升級的系統正在運行當中,為了提高可用性,將數據庫改用Oracle 11g R2 RAC。為了解決上下級數據同步問題,先后試用了GoldenGate和IBM MQ軟件,有待于下一階段實施。
數據庫在業務中的重要性日益提高,對于數據管理和處理有其他軟件不能替代的作用。完全可以說現在的數據中心就是以數據庫為中心的,其上層的應用軟件、中間件和下層的硬件資源都是圍繞數據庫提供服務的。舉個例子,雖然我們2001年的系統不再運行,但我們仍可以從當時的數據庫中導出數據,用于2010年系統的歷史數據比較和分析??梢韵胍?,將來軟件可能進一步改進和發展,但數據卻是持久的。
#p#
十余年的工作,對數據庫開發和維護有下面幾點體會:
1. 開發數據處理軟件已經離不開數據庫, 要充分發揮數據庫的功能才能開發出高效的軟件。
2. 要選擇一種功能比較完善的數據庫,充分利用數據庫版本的升級帶來的新技術的好處。
3. 一個應用同時支持多種數據庫是困難的,應該集中精力用好一種數據庫。選擇了一種數據庫就不輕易改變,以節省學習成本和繼承開發經驗。
4. 數據庫的表現需要各種軟硬件的配合,比如主機、存儲、操作系統和應用軟件,開發人員了解得越多,越有利于開發高效的軟件。數據庫應選擇能充分利用硬件的版本,比如用64位版本。開發人員應了解技術的發展,了解過去的正確觀念在新條件下未必依然正確,比如用磁盤陣列存儲就不必人工指定表分區和數據文件對應就可以實現IO在多個磁盤的均衡分布。內存和CPU增加使SQL可以采用HASH連接等獲得更好的執行計劃。
5. 數據庫優化工作應在設計階段就考慮,這時更改的成本***,收效***。系統運行時同時監控性能的狀態,及時作出必要的調整,可以利用數據庫提供的各種工具。
6. 隨著用戶業務種類和數量的增長,需要管理的數據庫數量也不斷增加、環境越來越復雜,管理的難度也提高了,需要數據庫開發人員和數據庫管理員分工合作。雖然數據庫軟件在一定程度上能提供幫助,仍然需要經驗豐富的專業的人員和完善的數據庫管理制度,并嚴格執行。
針對于數據庫未來幾年所面臨的挑戰,盧濤給出了以下幾點:
在未來的幾年,隨著數據大集中的要求進一步提高,系統的在線用戶將有較大的增長,對系統應付并發讀寫訪問的能力是一個考驗,考慮利用內存數據庫等技術提高在線事務處理的能力。
數據庫的安全日益重要。同樣不能僅依靠數據庫提供的功能,比如加密、口令安全策略,而要從物理安全、訪問控制、安全網絡協議、數據庫備份恢復等多方面予以保障,經過實踐檢驗的制度和應急方案必不可少,同時加強開發人員和用戶管理,限制應用程序的用戶權限,禁止管理員用戶執行非管理操作。某些數據庫產品提供了審計功能,如果業務有此方面需要,也考慮采用。
傳統數據庫按用途分,分為OLTP和數據倉庫,不同用途的數據庫配置參數有一些差別,編寫的應用程序也很難同時滿足這2種不同的業務需要。某些廠商已經推出了同時適用2種應用場合的產品。
2010-2011年是列存儲數據庫發展較快的階段,對海量數據倉庫的分析查詢有很好的效果。傳統數據庫廠商在這方面動作不大,希望能在新版軟件中添加這方面的功能,以進一步提高數據分析操作的性能。
【編輯推薦】