2014年9月,delphi xe7 出來了,這次在數據庫技術方面,徹底拋掉了從1995 年delphi 1.0 就自帶的BDE(Borland Database Engine)數據庫訪問技術。從而宣告了這個持續
了20余年的delphi 訪問數據庫技術進入歷史。 縱觀delphi 數據庫技術的20年發展史,其實也是delphi 的發展史。通過數據庫技術的變化,也可以了解delphi的發展歷史及未來的方向。
一、 話說當初
Delphi 1.0 是16 位的編譯器,當時的互聯網幾乎是不存在,拿到的第一份delphi 1.0 是那種軟件集合光盤(你懂得),在486的win95 上好長時間,才安裝好,安裝界面是borland
經典的賽車儀表盤窗口。裝完以后,就進入了拖拽控件的設計界面,配套的數據庫技術就是BDE,BDE(Borland Database Engine)是borland公司的數據庫引擎,它結合了SQL Links允許程序員
通過它能夠連接到各種不同的數據庫(例如oralce,sybase,sql server等)。最早的 BDE是給Paradox 用的,后來borland 把paradox 賣了,保留了BDE,在delphi 里面就直接使用BDE
作為訪問數據庫的技術。由於當時真正的數據庫服務器還很少,所以開發的數據庫還是以本地為主,數據庫為Paradox.由於當時BDE支持paradox 沒有中文語言支持,中文出現的是亂碼,很是麻煩,
經過多次實驗,終於發現使用泰國語言支持可以顯示中文(當年中文支持幾乎是所有計算機系統頭疼的事).
Delphi 2.0 使delphi 進入了32位的世界,而且明確的提出了C/S 的概念。BDE 也正式換成了32位的,使用BDE 可以順利的連接訪問oracle 和 sql server 數據庫服務器。徹底進入C/S 時代,脫離了
單機桌面時代,看到oracle 7.0 數據能夠顯示到dbgrid 里面,並能夠刪改,簡直興奮死了。 在delphi 1.0 和delphi 2.0 時代,基本上沒有成熟的第三方的數據庫技術,屬於BDE 壟斷的時代。
二、群雄逐鹿
1997 年,Delphi 3.0 的推出,大大穩固了Delphi 的市場地位,已經與比他出來更早的VB,PB 並駕齊驅了。在Delphi 3.0 中,borland 已經提出了多層的概念及實現方式,而當時C/S 基本上還是完全壟斷數據庫
市場,經過了好多年,多層技術才被眾多的開發者接受,可見當時borland 的牛人多厲害。
delphi 3.0 出來后,delphi 的數據庫訪問技術在第三方的支持下,出現了百花齊放,主要有三種形式。
一種是類似BDE 的,直接支持后台數據庫服務器的訪問,有支持多種數據庫的SQLDirect,zeoslib等,還有支持單一數據庫的,例如ODAC、DOA等。這些直接使用原生代碼實現數據庫API ,然后訪問數據庫服務器。
第二種是類似后來的 ADOEXPRESS, 通過封裝ODBC、 ADO等微軟數據訪問技術數據庫服務器,典型代表就是ODBC Express。這兩種與BDE 最大的不同就是程序分發時不在安裝BDE, 只要安裝了數據庫的客戶端就可以了,
減少了程序配置的麻煩。
第三種就是自己實現數據庫,用delphi 自己開發一套完整的數據庫系統,既可以直接把數據庫功能集成到程序里面,也可以分成客戶端與服務器端使用。這一類典型的代表就是Elevatesoft's DBISAM
和TurboPower's FlashFiler ,還有Nexus Database Systems NexusDB。這些既實現了C/S 架構,也不用購買昂貴的數據庫服務器。非常適合對於中小企業的應用。
這些第三方數據庫技術各個都有自己的買點。開發者選擇的也很多,有時為了集成一些項目,甚至在一個IDE上會裝上超過5種以上的數據庫訪問技術。
三、危機四伏
隨着delphi 4.0 的倉促推出而失敗,delphi 5重新奪回過去的輝煌,同時編譯器增加了很多新的功能,BDE 也在微小更新,第三方數據庫訪問技術隨着時間的發展,技術也越來越成熟。同時服務端的數據庫技術也在突飛猛進,
oracle 推出了8i,微軟也出了sql server 2000,BDE 卻沒有大的更新,已經有了昨日黃花之感。
同時BDE的第一次內部危機也隨之而來,Borland 要在delphi 6 中加入Linux 的支持,而BDE 是只能支持WINDOWS的,那么要在delphi 中支持Linux 數據庫的訪問,BDE是不能用了。於是borland 開發了同時支持windows 和linux 的
DBEXPRESS.同時為了提高多層應用,DBEXPRESS 特意處理了很多多層上問題,與三層技術結合起來,叫了一個非常牛的名字datasnap。准備做一個企業級的多層中間件。dbexpress 的推出,已經提前宣布了BDE 的命運。
delphi 7.0 的推出,把delphi推到了歷史上的最高點,盛極必衰。borland內部開始發生動盪,很多人紛紛離去,支持linux 的kylix 沒有大賣,使得delphi 又回到微軟的陣營,
先推出了一個歷史上最爛的delphi 8 for NET(沒有之一),接着推出了歷史第二爛的delphi 2005,導致delphi 的水平過了好幾年還維持在delphi 7.0 的水平,錯失了市場,
錯失了時機,delphi 開始衰敗。broalnd 內部繼續動盪,也沒有太多精力把DBEXPRESS 的技術提高,使得BDE 沒有被完全踢出delphi. 當然了BDE 自己也沒有任何變化。
delphi業務自己也被borland 分理出來,搞了一個叫codegear 的部門,伺機叫賣。在這期間出了delphi 2006 和delphi 2007,這兩個版本除了IDE 的變化外,
還是基本上炒delphi 7 的冷飯,連最基本的unicode 都沒有加入支持。
易博龍在delphi 歷史最低價的時候出手了,以非常便宜的價格購得了borland 的delphi 及其他開發工具業務。推出了第一個支持unicode 的 delphi版本 delphi 2009(當然是bug 滿天飛)。
緊接着就是dephi 2010,delphi xe. 這幾個版本主要是就是unicode 的穩定版,數據庫技術這一塊除了支持unicode 外,也沒有大的變化。
四、雙雄爭霸
delphi xe2 出來后,雖然開始正式支持WIN64 和mac osx了,但是時不我待,機會已經錯過,delphi 的市場已經大幅萎縮,很多第三方數據庫技術要么就是停止更新,
要么就是簡單的維護,不再做大幅度的更新。數據庫服務器訪問控件一直更新的基本上就剩devart 的unidac 和da-soft的anydac.
其實很有意思,這兩個公司的數據庫訪問控件都是從oracle 數據庫訪問做起的,devart 的第一個數據庫訪問控件叫ODAC。da-soft 的第一個數據庫訪問控件叫NCOCI8,
而且免費的。接着開發出來freedac 也是免費的,后來又推出來商業版的的anydac.而且還在RTC 公司支持下,開發了一個簡單的三層數據庫訪問框架--Thindac。
后來remobjects 公司看上了anydac , 就把anydac 收入旗下,與自己的拳頭產品Data Abstract搭配起來買。后來可能是由於產品發展的方向不一致,
anydac 經過不到三年時間,又從remobjects 公司獨立出來了。
delphi xe2,xe3,xe4 主要任務是跨平台,開始支持win64,並通過Firemokey 開始支持mac osx,ios。 雖然有一些小的毛病,但是產品質量已經大大提高.firemonkey 也在不斷地優化。
當然了,那個 BDE 雖然基本上沒人用,還是在那里呆着,作為標准配置,每次 Delphi 安裝時,都被默默的安裝到硬盤上。
在所有的第三方數據庫控件中,只有unidac 和anydac 及時的更新,快速支持firemonkey,並支持delphi最新的跨平台應用。
因此這一階段的第三方數據庫支持,就剩下這兩個開始爭霸。這兩個各有優缺點,功能也各有千秋。有時確實難分伯仲。
大體上是unidac 支持后台數據庫自身功能強點。而anydac 是客戶端數據操作功能更完善,更強。
五、王者能否歸來?
隨着delphi xe5 的發布,發生一件令人瞠目結舌的事情,delphi xe5 直接把anydac 集成進去了,原來易博龍已經在delphi xe4 時已經把anydac 收入旗下,
命名為 firedac. 隨着xe5 正式發布。至此,支持多平台的第三方數據庫控件就只剩下了unidac 為主力軍。
隨着delphi 半年一個新版本的快速更新,從今年4月份的 Delphi xe6 到今年的9月發布的delphi xe7,
firedac已經融入了Delphi的血脈之中,不但是作為一個數據庫訪問層,而且在datasnap 中起了舉足輕重的作用,
使用TFDMemTable開始了替換蒼老的、眾人詬病的 Tclinetdataset 的進程,並在最新的 Enterprise Mobility Services (EMS)
的客戶端扮演重要角色。這樣 BDE 終於被送進歷史的博物館,結束了20余年的生涯(默哀,一路走好)。
由於firedac 被delphi 直接集成,成了免費的,這樣有了delphi就可以直接使用firedac。而且性能與unidac 相近,
很多程序員會直接選擇firedac 作為數據庫訪問層,並開始放棄unidac。 這種情況下,會不會造成unidac 的沒落?
這一點個人認為應該不會的,競爭是暫時的,長遠來看,更多是雙贏:
1.firedac 的更新是隨着delphi 版本發布的,也就是說firedac 的新功能只有最新版本delphi 才能使用,
而unidac 支持從d5 到xe7 所有版本,你不用升級delphi 就可以訪問最新的數據庫功能(好像現在用d7 的人不在少數)。
因此,unidac雖然收費,但是使用面會更寬一點。
2.unidac也有很多功能點是獨一無二的(例如無客戶端訪問oracle數據庫),對於一些有這種要求的客戶還是會繼續 留在unidac 上的。
同時由於 firedac 是免費的,那么為了競爭,unidac 也會加快開發,增加更多功能,對我們來說 其實也是好事。
在這一點上,沒了unidac, 其實對於開發者來說沒有任何好處。
3.作為兩大跨平台的數據庫訪問控件,他們的對手不是彼此,而應該是delphi 以外的企業開發市場,如何利用各自的技術優勢
把delphi 的市場做大?讓delphi 能夠提供更多的功能,支持更多的新興技術,吸引更多的開發者進來。有了市場, 盤子大了,
隨便哪一個都會有更多的用戶使用,還害怕什么,delphi 3-delphi7 時代就是很好的例子。
4.firedac 與unidac 更應該發揮各自的優點,加強合作。利用firedac 的優勢,加強Delphi的datasnap,提高穩定性,增強
更多新的功能(現在已經加強了REST 的支持),提供一個穩定的強大的企業級的中間層。而unidac 也可以利用自身的優勢,
提供對新的數據庫功能及特性的支持(例如oracle 12c,sql server 2017), 乃至提供對nosql 數據庫的支持,
來加強 delphi 企業級開發的優勢。如果把兩者的優勢結合起來,就可以開發出功能強大又支持各種新技術的企業級的數據庫應用。
讓delphi 走向輝煌,重回王者之位。
不破不立,舊的不去,新的不來,BDE 走了,firedac 來了,新的delphi 攜帶着多平台開發也來了,你准備好了沒?
備注:1、由於本人年紀已老,記憶力下退,文中很多東西都是按記憶寫的,可能年代和名稱會有錯誤,歡迎指出;
2、由於本人年紀已老,思維僵化,如果你認為我的觀點不對的地方,就不要指出了,指出我也不改。
2019.10 補記:
unidac 如我所猜開始支持多種雲端數據庫的支持,同時sql server 也實現了無驅直連訪問。
dbexpress 也成為昨日黃花,落入塵埃。