以下的文章主要向大家講述的是DB2客戶端開發的最新動向,你是否對其存在疑惑,即IBM 的 DB2 開發小組是不是真的把所有的這些開源的具有解釋性語言與富 Internet 應用程序資源考慮在內。
告訴您吧,這個小組中就有一些人正在研究一種新的用於公司數據服務器的管理控制台……
應用程序DB2客戶端開發人員鐘愛 Python、Perl、PHP 和 Ruby。DB2 准備支持它們 —— 您呢?
數年前,我的朋友 Cathy 拜訪我在喬治亞州亞特蘭大郊區的家。我向她介紹了我的兒子,那時他才四歲,我告訴他,Cathy 在賓夕法尼亞州有一個農場。“真的嗎?”Zachary 問道。“你家有馬嗎?”“有啊,”Cathy 說,“我們有馬。”
“有豬嗎?”
“有,我們有豬。”
“有沒有巨蟒(python)呢?”“沒有,”Cathy 答道,“我們沒有巨蟒。”
Zachary 有一點失望得走開了。Zach 是一個非常聰明的孩子,但是那個時候他對巨蟒知道得並不多。我得說,他對這種大蛇的了解,與我對 Python 編程語言的了解程度差不多。
時間很快來到 2007 年 3 月 29 日。我在澳大利亞墨爾本,聽 Curt Cotner(IBM 同行,IBM 數據服務器首席技術官)在 International DB2 Users Group (IDUG) Australia Forum 上做主題演講。Curt 正在談 Python 和目前開發人員(尤其是 Web 應用程序開發人員)當中流行的其它編程語言。
對於 Python、Perl、PHP 和 Ruby,以及我至少比較熟悉的語言,例如 Java 和 C#(後者在 .Net 應用程序環境中被廣泛使用),IBM 的頂級 DB2 開發人員在談論什麼呢?結果據 Curt 所說,IBM 正在做很多工作來使 DB2 成為用於各種現代DB2客戶端開發語言的很好的數據服務器,這條消息是關注 DB2 的人所關心的。
幾周之後,我再次目睹 Curt 在 IDUG North America Conference 上做演講,當 Curt 同意坐下來就這個話題與我進行 Q&A 時,我得以從他本人那裡得到一些很好的補充信息。根據 Curt 和其它消息來源(包括我在 CheckFree 的同事 Eric Drudge,他是我們的一個頂級應用程序架構師),DB2 人員應該知道關於數據服務應用程序客戶端的熱點話題。
DBMS 出現合並,而開發平台越來越多
至於作為企業級數據服務應用程序的基礎的 DBMS,用戶主要使用 IBM 和另外兩家供應商提供的產品。在開放源代碼軟件領域,情況也差不多,也是由幾種 DBMS 統領市場。
在應用程序一端,情況又不一樣。編程語言來來往往(IT 的老一輩們:還記得 ALGOL、Pascal、PL/I和 APL 嗎?),新的編程語言不斷湧現,其中有些編程語言流行起來,獲得了廣泛的使用。根據 DBMS 軟件技術“強者恆強”的特點,是什麼導致語言多樣化的場面?對此我有一些想法。
學生因素。很多新語言活動發生在世界各地的學校裡。由於以下原因,孩子們(對我來說他們還是孩子)追求新的編程語言的開發,因為:
他們想要領先。很多計算機科學專業的學生都想成為下一個 Linus Torvalds。他們的主要動機未必是金錢。他們的目的是被承認——尤其是在其他程序員當中——成為一名領導者和革新者。
他們做得到。創造新的編程語言不像煮雞蛋那麼容易,但是比DB2客戶端開發較大型企業要求具有功能性、易管理性、可伸縮性和可用性的新 DBMS 要容易得多。(Chris 是我的大學室友,有一天晚上,Chris 的瘋狂的實驗室伙伴發現他還呆在學校計算機中心的地下室裡,他希望 Chris 是在為項目做第二天的工作。“哦,那個早做完了,”Chris 說。“那你在做什麼?”“我在編寫我自己的 FORTRAN 編譯器。”“為什麼?”“因為我做得到。”
追求簡單。很多人之所以要花力氣創造新的編程語言,是為了尋找一種方法用更少的代碼做更多的事情(就應用程序功能而言)。(有些語言的愛好者喜歡進行一些競賽,目標是用最少的代碼提供某種功能。)當然,為了提供目標功能,需要執行很多機器指令,但重點是減少程序員必須編寫的代碼的行數。
使 Web 應用程序邁上新的台階。舊的 browser-as-displayer-of-HTML 模式逐漸落後於一種可以稱作“browser-as-desktop”的模式,在後一種模式中,在浏覽器中運行的應用程序代碼可以與用戶交互,而且在改變顯示元素和與後端服務器進行異步通信時,不需要那麼多令人討厭的 Web 頁面重裝載。於是,為了做那些舊語言不能做或者做不好的事情(尤其是在用戶界面級),出現了一些新的語言。
服務器硬件的進步。如今很多受熱捧的語言都是腳本編制語言,運行用這種語言開發的程序時,程序中的每一行代碼是在執行時動態地轉換成機器語言的,而不是在一個預先執行的進程中編譯。腳本編制語言的 CPU 效率不如編譯語言,但是如今這一代的微處理器實在太快了,與數年前相比,CPU 周期要廉價得多,腳本編制語言帶來的 CPU 開銷變得越來越微不足道。
程序員的談話
我在本節中所解釋的術語經常可以在關於現代 Web 應用程序DB2客戶端開發的討論中聽到。
PHP。PHP(PHP: Hypertext Preprocessor 的遞歸的首字母表示),根據 www.php.net 上的描述,是“一種開源的通用腳本編制語言,特別適合 Web 開發,可以嵌入到 HTML 中”。注意,PHP 代碼是在應用服務器上執行的——客戶機只接收 PHP 代碼執行的結果,而不是代碼本身。
Perl。Perl(practical extraction and report language)是一種跨平台的開源的腳本編制語言,由於它的文本操作功能和快速開發周期,在 Web 應用程序開發人員當中較為流行。有人將 Perl 稱作 Internet 的膠帶(duct-tape)。
Python。一種開源的腳本編制語言,被廣泛用於各種應用程序領域。Python 的愛好者經常使用“batteries included”這個詞來形容這個非常全面的標准庫,它包含了從異步處理到zip文件的各種功能。
框架(Framework)。在 Web 應用程序開發的上下文中,框架是方法(也就是函數)和對象(事物的信息實例)的集合,它們使得用更少代碼開發 Web 應用程序變得更容易。框架提供用於數據庫訪問和會話管理等類似內容的庫。(在 http://en.wikipedia.org/wiki/Web_application_framework 上提供了關於這個話題的優秀介紹。)我的同事 Eric(應用程序架構師)將框架描述為用於快速構建 Web 應用程序的腳手架。
Django。Django 是和 Python 編程語言一起使用的一種開源的 Web 應用程序框架。
Ruby。Ruby 是 20 世紀 90 年代中期在日本創立的一種開源的腳本編制語言。其愛好者將它描述為一種“優美的”、“巧妙的”語言。Ruby 的首席設計者 Yukihiro Matsumoto 說過:“Ruby 看似簡單,但其內部非常復雜,就像我們人體一樣。”Ruby 最令人感興趣的一個方面是,所有東西看上去都是一個對象。
Rails。開源的 Rails 框架是和 Ruby 編程語言一起使用的。
JavaScript。JavaScript 是一種開源的腳本編制語言,最初由 Netscape Communications 開發,現在由 Mozilla Foundation 管理。與其名字的字面意思不同,JavaScript 不是“解釋性的 Java”;實際上,它與 Java 編程語言無關(不過 JavaScript 常被嵌入在 Java 應用程序中)。Web 浏覽器是 JavaScript 最常見的執行環境。
Ajax。Ajax,Asynchronous JavaScript and XML 的簡稱,是用於DB2客戶端開發交互式 Web 應用程序的一種技術。采用 Ajax 時,浏覽器中運行的代碼可以與用戶交互,例如,當用戶的光標停在 Web 頁面中的某一段上時,那一段會“跳出來”並且高亮顯示,但是不必為此重新裝載 Web 頁面。Wikipedia 在 http://en.wikipedia.org/wiki/Ajax_(programming)上提供了對 Ajax 的優秀介紹。
DB2 連接
那麼,所有這些與 DB2 有什麼關系呢?讓我為您道來。
DB2 與 PHP。IBM 開發並支持一種用於 DB2 的開源的 PHP 擴展,即 ibm_db2。該擴展針對 DB2 進行了優化,並且支持存儲過程和大型對象(LOB)。它還提供原生 XML 和 XQuery 支持,可以用於 PHP 4 和 PHP 5。在 http://us2.php.net/manual/en/ref.ibm-db2.php 上可以找到關於這種 PHP 擴展的更多信息。另外,還請了解 Zend Core for IBM,它是與 Zend Platform(來自 Zend Technologies 的一種流行的 PHP 應用服務器,該公司由 PHP 的架構者創立)兼容的一個 DB2 訪問解決方案。 可以從 ibm.com/software/data/info/zendcore 獲得關於 Zend Core for IBM 的更多信息。
DB2 與 Perl。CPAN,即 Comprehensive Perl Archive Network,提供用於 DB2 的 Perl 數據庫驅動程序。在 http://search.cpan.org/~ibmtordb2/DBD-DB2-1.1/DB2.pod 可以找到關於它的信息。注意,在 DB2 的“Viper 2”版中,IBM 將提供一個 PHP 驅動程序的二進制代碼。
DB2 與 Python(和 Django)。在 sourceforge.net/projects/pydb2 上有一個 Python DB2 Interface (PyDB2)。在 DB2 for Linux, Unix, and Windows 的“Viper 2”版中,IBM 計劃提供一個 Python DB2 驅動程序。
該驅動程序將實現 Python Database API Specification v2.0 (見 www.python.org/dev/peps/pep-0249/)。同樣是在 DB2 “Viper 2”中,IBM 計劃支持作為 Python 應用程序 Django 框架的一部分的對象-關系映射器(欲了解關於 Django Database API 的更多信息,請訪問 www.djangoproject.com/documentation/db-api/)。
DB2 與 Ruby(on Rails)。IBM 在它的 alphaWorks 網站(www.alphaworks.ibm.com/tech/db2onrails)上提供了用於 DB2 on Rails 的一個啟動工具包。這個集成的安裝程序在 Windows PC 上創建一個完整的 DB2 Ruby on Rails 開發環境。(也可以使用 alphaWorks 站點上提供的啟動工具包的驅動程序源在其它平台上創建。)
也許您想知道 IBM 的 DB2 開發小組是不是真的把所有這些開源的解釋性語言和富 Internet 應用程序資源考慮在內,告訴您吧,這個小組中就有一些人正在研究一種新的用於公司數據服務器(DB2 for z/OS、DB2 for Linux/Unix/Windows 和 Informix Dynamic Server)的管理控制台,這種管理控制台基於 Web,它將利用 Ajax 相關技術更好地為 DB2 管理員提供系統健康、可用性和故障排除信息(用戶界面級的數據將通過與主機系統的異步通信動態地更新,所以不必等到重新裝載 Web 頁面)。是的,他們實現了它,並且正在使用它。
現在怎樣?
好了,與數分鐘之前相比,現在您對當前 Web 應用程序DB2客戶端開發有了更多的了解(我希望如此)。您將如何利用這些知識呢?首先,希望您的應用程序開發同事在討論編程語言和技巧時,您能理解更多的內容。能理解更多東西之後,您也可以加入那樣的談話。
在討論的過程中您就有機會讓程序員知道開源 DBMS 不是惟一可用的數據庫解決方案,即使他們正在使用開源的語言編程。還有一種工業級的、高度可伸縮的、供應商支持的 DBMS,它可以非常有效地解決 Web 應用程序在數據持久層方面的需求(某些開發人員就是這樣看待數據庫的)。這種 DBMS 會定期得到增強,以便更好地適用於程序員們喜愛的腳本編制語言。
當然,它就是 DB2。