標籤:style color io os 使用 ar strong for 資料
2014年9月,delphi xe7 出來了,這次在資料庫技術方面,徹底拋掉了從1995 年
delphi 1.0 就內建的(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.而且還在RT一般股份有限公司支援下
,開發了一個簡單的三層資料庫訪問架構--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 2012), 乃至提供對nosql 資料庫的支援,來加強
delphi 企業級開發的優勢。如果把兩者的優勢結合起來,就可以開發出功能強大又支援各種新技術的企業級的資料庫應用。
讓delphi 走向輝煌,重回王者之位。
不破不立,舊的不去,新的不來,BDE 走了,firedac 來了,新的delphi 攜帶者多平台開發也來了,你準備好了沒?
備忘:1、由於本人年紀已老,記憶力下退,文中很多東西都是按記憶寫的,可能年代和名稱會有錯誤,歡迎指出;
2、由於本人年紀已老,思維僵化,如果你認為我的觀點不對的地方,就不要指出了,指出我也不改。
delphi 資料庫技術沉浮錄--謹給成為曆史的BDE