2009 年 11 月 的封存

12月份的研討會 : 從BDE到dbExpress,就是要開發高效資料庫應用系統

大約在10月底之際,EMBT便請我在12月設計一場技術研討會,並且請我思考要做什麼主題時,我幾乎沒有花什麼時間考慮就立刻說我想做一場如何開發高效資料庫的技術研討會,為什麼? 因為在10月中旬左右我看到了EMBT推出了DB Optimizer 2.0,在看完DB Optimizer產品經理展示了2.0的功能之後,我立刻在心中驚呼其中的一些功能不正是我在數年前使用Delphi開發資料庫應用程式時最想擁有,但卻找不到解決方案的東西嗎?

雖然當我觀看DB Optimizer產品經理展示時,他都是以DBA或是資料庫開發人員的角度來說明,但對於像我這種同時擁有開發工具,中介軟體和資料庫開發經驗的人來說,卻能夠同時以用戶端,中介和後端開發的角度來體驗DB Optimizer,因此在我觀看的同時腦海中不斷的出現從前開發的歷史畫面並且不斷的對我自己詢問『啊,這個功能如果從Delphi/BCB或是Java/C#的開發人員來看的話會如何?』等問題。那麼為什麼當我在觀看DB Optimizer 2.0時會有這種反應呢? 這要從我還是蔡鳥程式師時說起。

記得在1992年我從喬治亞理工學院回台之後,第一份工作就在一家大型MRP/ERP公司上班,當時我是使用C/C++語言的系統工程師,那時我對資料庫並不熟悉,因此對於當時另外一個使用Informix部門就很好奇,因為看著那些Informix的開發人員能夠寫出非常複雜的SQL程式就覺得非常的佩服,自當『見賢思齊』,好好的學習一番。記得有一天上班時Informix部門在一台電腦前擠滿了開發人員,我就好奇的往前湊熱鬧看看發生什麼了什麼事,原來是因為有一支Informix的程式執行的非常緩慢,因此Informix部門最強的顧問正在想辦法調整程式。後來那位顧問終於讓那支Informix程式執行得比原先快了好幾倍的速度,我後來也和他談了一下,問他做了什麼可以讓結果差這麼多。他告訴我他試著改寫了一些程式碼(後來我才知道應該是改寫了SQL敘述),經過幾次的嘗試之後速度就上來了,但為什麼會這樣,他說應該是改寫的程式比較好的使用了索引,他也嘗試在資料庫中增加了一些索引來試著幫助改善速度,至於最後到底是因為什麼原因他也無法確定。我現在再回想當時的情形,他應該是憑著經驗在調整SQL敘述,每次調整了之後就『Try And Error』看看速度有沒有上來,由於他擁有比較多的知識和經驗,因此可以朝正確的方向和比較快速的找到比較好的結果。但由於當時沒有工具和精確的方法,因此這樣做仍然有許多的盲點,例如:

1. 如何在一開始就縮小『Try And Error』的範圍?

2. 如何比較不同調整的SQL敘述的效率差異?

3. 每一個SQL敘述如何使用索引? 使用了那些索引? 那些索引反而會減緩SQL敘述的效率?

這些問題即使是到今天仍然不易回答,因此我們仍然只是依靠經驗豐富的DBA或是資料庫開發人員來調整SQL敘述,但是對於用戶端的Delphi/BCB/Java/C#或是撰寫中介軟體的開發人員來說,又如何能夠能夠寫出良好的SQL敘述?

另外一個場景是數年後我到了另一家使用Oracle的軟體公司,當時是Delphi 2的時代,也是主從架構正逐漸成為主流的時代。那家使用Oracle的軟體公司中也有許多的DBA和資料庫開發人員,他們習慣了使用PL/SQL來寫程式,因此我知道他們並不喜歡我們這些使用程式語言來開發資料庫應用系統的人,因此他們一開始堅持所有和資料庫處理有關的程式碼都要由他們使用PL/SQL和預儲程序/觸發器來撰寫,我們這些用戶端的開發人員只需要撰寫和UI有關的工作,如果需要資料時再呼叫他們寫好的PL/SQL和預儲程序即可。由於Delphi 2使用BDE存取Oracle,因此後來經常造成我們這些用戶端開發人員和後端PL/SQL開發人員的小磨擦,為什麼? 這是因為在用戶端開發人員當然是使用BDE來存取資料,但當開發人員使用BDE存取資料時,在許多的情形下是由BDE或是它的SQL Links驅動程式來產生SQL敘述,開發人員如果沒有深入的知識是無法瞭解或是掌握BDE/SQL Links會產生什麼樣的SQL敘述,雖然在大多數的應用中BDE/SQL Links可以產生不錯的SQL敘述,但有時候就不會那麼幸運了,當這種情形發生而造成資料庫效率下降時那些DBA和資料庫開發人員就不高興了。

不管是BDE/SQL Links,dbExpress,ADO,ADO.NET,JDBC或是未來資料存取技術逐漸走向OR Mapping的發展,這些資料存取技術如何產生SQL? 又如何和後端的資料來源互動? 這對於開發人員是非常重要的,因為它關係了應用系統的執行效率。如果您熟悉BDE或是dbExpress,您會說Delphi/BCB不是有SQL Monitor可以幫助我們觀察用戶端應用程式和資料來源之間的執行情形嗎? 是的,但SQL Monitor只能讓您看到用戶端和資料庫之間的互動,由BDE/SQL Link或是dbExpress產生的SQL敘述到達了資料庫之中之後如何使用資料庫的資源卻是無法看到的。到了資料庫之中DBA和資料庫開發人員或許可以看到資料庫如何執行這些SQL敘述,但DBA和資料庫開發人員卻又不知道這些SQL敘述是如何產生的,嗯,這聽起來像是陷入了兩難的境界了嗎?

這就是為什麼當我看到DB Optimizer 2.0時給我的震撼了,因為它可以使用來解決上面提到的困境,更棒的是藉由它的調校功能我們可以再把它拿到用戶端的Delphi/BCB/C#/Java來使用,可以立刻讓用戶端的資料庫應用程式使用最高效率的SQL敘述。

如果您看完了本篇簡短的文章之後也感同身受,也想瞭解如何結合Delphi/BCB和DB Optimizer 2.0來開發高效的資料庫應用系統,不管它是桌面型,主從架構型,Web應用型或是多層架構,都歡迎您來參加,讓我們一起度過一個深度,愉悅的技術之旅。

廣告

3 則迴響

RAD Studio 2010, Delphi 2010, C++Builder 2010 Update 2已可下載

CodeGear已釋出 RAD Studio 2010, Delphi 2010和C++Builder 2010的Update 2, 我已經下載安裝完畢, 整個過程非常的順利.
如果您是合法的使用者的話, 那麼您可以在下面的URL下載

8 則迴響