我們使用標準JDBC調用來構建我們的servlet,通過DB2 Information Integrator和本地客戶端接口(無DB2 Information Integrator)訪問數據。只要有可能,我們就使用DataSource連接(連接池),這樣能夠更有效的利用系統資源。更進一步,我們通過執行JNDI在每個servlet的init方法中查找DataSource,設法維護編碼效率。
當我們通過DB2 Information Integrator訪問遠程數據的時候,我們的servlet發出針對別名或者跨多個別名的UNION ALL視圖的查詢。當直接訪問遠程數據的時候,我們的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更為輕易。
因為我們的servlet是數據集中的,它們的代碼大多數包括數據訪問程序邏輯。 利用DB2 Information Integrator,我們的servlet連接到單一的基本數據服務器,發出單一查詢,然后分布它們取得的資源集。 假如不使用DB2 Information Integrator,我們的servlet分別連接到每個數據源,每個數據源至少要發出一條查詢,把從每個數據源中檢索得到的數據放入至少一個本地臨時輔助表中,付出用于輔助表的(最后)一個查詢,清除輔助表的內容,發布它們取得的所有的本地的和遠程的資源。
當然,這需要更多的編碼要實現。 此外,假如沒有DB2 Information Integrator,它會花費我們成倍的時間來實現我們的servlet,因其工作的復雜性。 并且這個復雜性的大部分是如何把每個查詢都正確的分解為針對每種數據源。
我們構建需要整合來自多個數據源的數據的servlet。 一類使用DB2 Information Integrator,而另一類直接訪問每個數據源。 我們的經驗顯示,當我們使用DB2 Information Integrator提供訪問不同數據源的透明性的時候,設計、開發和維護工作明顯減少。 在我們的例子中,我們減少了代碼量達40%。 此外,我們不必進行試圖確定如何有效地分配我們的查詢到每個數據源,以最小化不必要的數據傳送這個令人煩惱的、耗時的任務,同時仍然能夠保持我們工作的完善性。 我們通過依靠DB2 Information Integrator固有的全局優化能力完成這個任務,它答應我們在保持性能的同時獲得正確結果。(全文完)