DB2J2EE開發成本收益分析(三)
|
基本servlet設計
我們使用標準JDBC調用來構建我們的servlet,通過DB2 Information Integrator和本地客戶端接口(無DB2 Information Integrator)訪問數據。只要有可能,我們就使用DataSource連接(連接池),這樣能夠更有效的利用系統資源。更進一步,我們通過執行JNDI在每個servlet的init方法中查找DataSource,設法維護編碼效率。
當我們通過DB2 Information Integrator訪問遠程數據的時候,我們的servlet發出針對別名或者跨多個別名的UNION ALL視圖的查詢。當直接訪問遠程數據的時候,我們的servlet發出針對每個數據源的查詢。然后,我們必須確定如何整合返回的結果。
我們可以在我們的servlet中手工完成這些整合工作,編寫必要的代碼根據需要組合、分類和分組這些數據。 然而,這將會有很大的工作量。 取而代之,我們選擇利用一個本地DBMS表來幫助我們的工作,我們這么做的原因是這樣的軟件對于大多數WebSphere開發者也是有用的。 在從每個數據源檢索到適當的數據以后,我們的servlet把結果插入一個本地DB2數據庫的輔助表中,并且查詢這些表以獲得最后的結果。 當然,我們試著去過濾盡可能多的位于遠程數據源的數據,來最小化網絡通信量并進一步提高我們的本地servlet的效率。
如果這聽上去很含糊,那么讓我們研究一個簡單的例子。 想象我們需要構建一個servlet,不使用DB2 Information Integrator,報告一套零件的最低供應價格。 在與我們三個數據源中的每一個連接之后,我們的servlet將查詢每一個數據源上PARTSUPP數據,來找到這些零件的最低供應價格。 (SQL語句可能看起來像Select MIN ( ps_supplycost) from PARTSUPP where ps_partkey IN ( list of ps_partkeys) group by ps_partkey。) servlet然后將把價格信息儲存到一個本地臨時表中,這個表兩個列:ps_partkey和ps_supplycost。 最后,這個servlet可能發出一個針對本地表的查詢,計算最小的ps_supplycost值,使用ps_partkey分組。
緊接著,是實現我們直接使用直接數據訪問的servlet的基本程序邏輯。 當然,程序比僅僅編寫一個簡單的查詢要更復雜,我們要編寫當我們使用DB2 Information Integrator進行數據訪問的時候,我們要做什么。但是到底有多復雜呢?請接著向下讀。
現在,你可能對我們從我們的工作中了解到的東西感到好奇。 我們將在本文中總結我們的結論,然后在后續的文章中向你說明我們怎樣得到這些結論。 但是歸根到底還是那句話:我們發現,當我們使用DB2 Information Integrator的時候,構建servlet更為容易。
為什么?因為使用DB2 Information Integrator (II):
· 我們需要實現的數據訪問邏輯要少些。大約少40%的代碼量。
· 我們不必為如何把我們的查詢正確地分解為用于每一種目標數據源而擔心。這節省了我們無數的時間和沉悶的調試工作。它還讓我們更加容易獲得我們想要的結果!
· 我們不必協調我們的數據訪問程序邏輯。 比如說,我們不必研究我們的數據是如何被分配以便作出適當的聯接過程程序邏輯。 我們讓DB2 II的優化程序為我們做這些工作。 通常它能做得很好,有時甚至比我們手寫的程序更要優秀。