j2me移動(dòng)數(shù)據(jù)庫的選擇 當(dāng)然PointBase并不是J2ME移動(dòng)數(shù)據(jù)庫產(chǎn)品的唯一選擇。在本文的剩余部分我會(huì)比較和討論幾種主流的競(jìng)爭(zhēng)者。在開始以前先讓我來闡述一下這個(gè)產(chǎn)品的前景。 高端設(shè)備上的jdbc數(shù)據(jù)庫 對(duì)于運(yùn)行PersonalJava或Personal PRofile的高端設(shè)備,數(shù)據(jù)庫能夠通過JDBC API被訪問。JDBC數(shù)據(jù)庫對(duì)于程序來說是最容易的數(shù)據(jù)庫類型。所有的廠商已經(jīng)至少有一個(gè)這種種類的產(chǎn)品。最大的挑戰(zhàn)是如何平衡這些功能。我們想要最小而且最快的數(shù)據(jù)庫。它能夠支持應(yīng)用程序所需功能的準(zhǔn)確集合。 midp設(shè)備上的輕量級(jí)數(shù)據(jù) CLDC(有限連接設(shè)備配置Connected Limited Device Configuration)/MIDP并不支持JDBC接口。在MIDP設(shè)備上支持復(fù)雜數(shù)據(jù)管理的兩個(gè)通用方法是: l 執(zhí)行非常輕量的數(shù)據(jù)庫和RMS上的類似JDBC的訪問API。這個(gè)方法很耗費(fèi)資源,但根據(jù)開發(fā)者開發(fā)能力和性能支持證明是最好的。 l 直接擴(kuò)展RMS類并在擴(kuò)展的類上執(zhí)行簡(jiǎn)單的行序列化,數(shù)據(jù)訪問,索引/搜索和同步方法。這個(gè)擴(kuò)展類是RMS上的一個(gè)細(xì)小的層次。它能模擬關(guān)系表的行為。 在產(chǎn)品評(píng)論的章節(jié)里我將討論這兩種方法。 同步服務(wù)器 眾所周知,同步是移動(dòng)數(shù)據(jù)庫的一個(gè)關(guān)鍵性能。大多數(shù)數(shù)據(jù)庫廠商有他們自己專有的同步服務(wù)器。這些服務(wù)器提供許多附加功能來優(yōu)化在移動(dòng)環(huán)境下的同步過程。同步服務(wù)器的重要性能包括如下幾點(diǎn): l 智能沖突解決方案 l 帶寬減少 l 端到端編密碼 l 后臺(tái)引擎性能調(diào)整 l 異步和可擴(kuò)展更新 接下來的幾章里我將檢查和比較幾種主流廠商的產(chǎn)品。 hsql 數(shù)據(jù)庫引擎 開放源碼的數(shù)據(jù)庫引擎―HSQL是基于Thomas Mueller的Hypersonic SQL項(xiàng)目。它完全是由Java是編寫的同時(shí)也是一種廣泛用于嵌入式的數(shù)據(jù)庫。它被包含在許多J2EE應(yīng)用服務(wù)器中。在移動(dòng)設(shè)備上,HSQL運(yùn)行在PersonalJava和FP/PP平臺(tái)上。HSQL是完全免費(fèi)的。你能自由地將它重新部署到你的應(yīng)用程序中,這對(duì)移動(dòng)應(yīng)用程序來說是容易的。 HSQL提供一個(gè)支持%95JDBC接口和所有JDBC數(shù)據(jù)類型的JDBC驅(qū)程。它支持事務(wù),外鍵甚至Java存儲(chǔ)過程。在HSQL中的表能寄存在內(nèi)存中和保存在磁盤文件中。HSQL只有少于160-KB的存儲(chǔ)器足跡footprint。它也為PersonalJava設(shè)備發(fā)布了一個(gè)數(shù)據(jù)庫管理控制臺(tái)(經(jīng)過Sharp Zaurus上的測(cè)試) 然而,HSQL缺少一些商業(yè)移動(dòng)數(shù)據(jù)庫上所需的高級(jí)性能和安全功能。更重要的是,HSQL不能提供任何同步解決方案。它也缺少一個(gè)為MIDP設(shè)備的解決方案。 pointbase Micro PointBase是一個(gè)純Java嵌入式數(shù)據(jù)庫方面的主流廠商。PointBase Micro數(shù)據(jù)庫能運(yùn)行在FP/PP/PersonalJava和MIDP平臺(tái)上。 在FP/PP/PersonalJava平臺(tái)上PointBase Micro 數(shù)據(jù)庫僅用91 KB 存儲(chǔ)器足跡就能支持大多數(shù)JDBC和SQL功能。它也支持例如數(shù)據(jù)庫編密碼這樣的高級(jí)功能。它不支持存儲(chǔ)過程和接口CallableStatement。因此MIDP不支持JDBC,PointBase為MIDP提供它自己的輕量級(jí)類似JDBC的API。PointBase Micro 數(shù)據(jù)庫的MIDP版本提供了一個(gè)用瀏覽器打開的MIDlet數(shù)據(jù)庫控制臺(tái)。 PointBase Micro 數(shù)據(jù)庫通過UniSync 同步服務(wù)器能容易地同服務(wù)器端PointBase嵌入式數(shù)據(jù)庫和Oracle 數(shù)據(jù)庫同步。 sybase iAnywhere 解決方案 在膝上型電腦上的輕量級(jí)數(shù)據(jù)庫ianywhere的SQL Anywhere Studio已經(jīng)擁有巨大的市場(chǎng)份額。在普遍設(shè)備上的移動(dòng)數(shù)據(jù)庫市場(chǎng)它也有一個(gè)強(qiáng)大的份額。Anywhere SQL Studio 的自定義數(shù)據(jù)庫生成器是它一個(gè)關(guān)鍵創(chuàng)新。它讓用戶而不是數(shù)據(jù)庫廠商決定如何平衡數(shù)據(jù)庫存儲(chǔ)器足跡和它所支持的功能。
在Anywhere SQL Studio中用戶能指定將在應(yīng)用程序中調(diào)用的SQL狀態(tài)SQL statement。它根據(jù)用戶對(duì)根本性質(zhì)和事務(wù)功能的選擇生成一個(gè)自定義數(shù)據(jù)庫。所生成的數(shù)據(jù)庫是一個(gè)純Java類以及伴隨的一系列用戶應(yīng)用程序能調(diào)用的API。使用iAnywhere MobiLink 同步服務(wù)器的數(shù)據(jù)同步API也能加入到自定義數(shù)據(jù)庫中去。 除了自定義數(shù)據(jù)庫生成器,iAnywhere也提供大存儲(chǔ)器足跡和移動(dòng)數(shù)據(jù)庫的一般用途。它包括支持Java儲(chǔ)存過程 Java stored procedure在內(nèi)的許多安全,優(yōu)化和可用性方面的功能。這些數(shù)據(jù)庫為了達(dá)到更好的性能天生就運(yùn)行在流行的移動(dòng)平臺(tái)上。Sybase iAnywhere SQL Studio 現(xiàn)在仍然不能支持MIDP數(shù)據(jù)庫的自動(dòng)生成。 ibm DB2 Everyplace IBM DB2 Everyplace是IBM在移動(dòng)數(shù)據(jù)庫的禮物。對(duì)于IBM的客戶來說,DB2 Everyplace非常好地整合了其他IBM企業(yè)組件(例如,DB2 Universal Database 和WebSphere MQ Everyplace)和IBM開發(fā)工具(例如,IBM WebSphere Studio Device Developer)。DB2 Everyplace本身運(yùn)行在包括Palm OS,Symbian OS,Pocket PC,QNX 軟件系統(tǒng)和嵌入式linux在內(nèi)的許多平臺(tái)上。DB2 Everyplace支持加密數(shù)據(jù)域和表存儲(chǔ)優(yōu)化功能。 在MIDP平臺(tái)上,DB2 Everyplace有一個(gè)叫FastRecordStore的產(chǎn)品。它仿效在MIDP RMS記錄存儲(chǔ)之上的可索引和可搜索的關(guān)系表。 DB2 Everyplace 數(shù)據(jù)庫和FastRecordStore通過IBM同步引擎與后臺(tái)數(shù)據(jù)庫同步。DB2 Everyplace也附帶一個(gè)叫Mobile application Builder 的工具,它允許開發(fā)者可視化地創(chuàng)建DB2 Everyplace 應(yīng)用程序。 oracle9i Lite Oracle9i Lite是Oracle在移動(dòng)數(shù)據(jù)庫上的產(chǎn)品。它可運(yùn)行在Plam OS,Pocket PC,Symbian OS和Win32 等平臺(tái)上。Win32這個(gè)版本是為了能運(yùn)行在膝上電腦上并支持JDBC,多用戶模式以及Java存儲(chǔ)過程。Oracle9i Lite的Pocket PC和Symbian OS版本支持JDBC。而Palm OS版本僅支持Oracle自身專用的OKAPI(對(duì)象核心API Object Kernel API)和ODBC(開放數(shù)據(jù)庫連接Open Database Connectivitiy)。Oracle9i Lite suite包括一個(gè)移動(dòng)開發(fā)工具M(jìn)obile Development Kit,它能夠根據(jù)用戶自定義需求自動(dòng)生成和打包移動(dòng)數(shù)據(jù)庫應(yīng)用程序。目前它只能生成本身客戶端應(yīng)用程序。 Oracle9i 移動(dòng)數(shù)據(jù)庫通過Oracle移動(dòng)服務(wù)器和后臺(tái)Oracle數(shù)據(jù)庫服務(wù)器同步。如果我們使用Oracle9i Lite 移動(dòng)開發(fā)工具來創(chuàng)建應(yīng)用程序則移動(dòng)服務(wù)器會(huì)自動(dòng)為這個(gè)應(yīng)用程序生成同步邏輯。Oracle9i Lite支持任何基于TCP/ip的網(wǎng)絡(luò)上的同步,包括HTTP,CDPD(單元數(shù)字包數(shù)據(jù)cellular digital packet data),802.11b無線局域網(wǎng)。通過使用移動(dòng)服務(wù)器的開放傳輸API Open Transport APIs,我們也能增加新的傳輸。另外Oracle移動(dòng)服務(wù)器支持非同時(shí)的同步。在高峰期每個(gè)設(shè)備只是把同步內(nèi)容提交到一個(gè)隊(duì)列中然后退出。異步操作是可擴(kuò)展解決方案的關(guān)鍵。 在MIDP平臺(tái)上Oracle提供SODA(簡(jiǎn)單對(duì)象數(shù)據(jù)庫訪問Simple Object Database access),這個(gè)產(chǎn)品是基于RMS的。SODA實(shí)際上是一個(gè)支持MIDP設(shè)備的面向?qū)ο髷?shù)據(jù)庫。它允許存儲(chǔ),搜索和恢復(fù)類似JavaBean的數(shù)據(jù)對(duì)象。 選擇正確的移動(dòng)數(shù)據(jù)庫 選擇正確的移動(dòng)數(shù)據(jù)庫產(chǎn)品是個(gè)復(fù)雜的商業(yè)決定。由于移動(dòng)數(shù)據(jù)庫嵌入在客戶端應(yīng)用程序中,你需要為你所開發(fā)的每個(gè)產(chǎn)品支付版稅。為減少總開銷而簽訂一個(gè)好的合同是非常重要的。由于同步解決方案所特有的性質(zhì)每個(gè)產(chǎn)品都在某種程度上鎖定了廠商。因此開發(fā)人員不僅應(yīng)該考慮到產(chǎn)品的技術(shù)優(yōu)點(diǎn)而且應(yīng)該考慮到廠商的一貫聲譽(yù)和穩(wěn)定性。例如,如果你的移動(dòng)客戶端需要MIDP和Personal Profile 數(shù)據(jù)庫,你應(yīng)該選擇同一廠商中更好傳輸率的產(chǎn)品和更易管理的同步解決方案。 PointBase和Sybase iAnywhere提供極好的移動(dòng)數(shù)據(jù)庫解決方案。然而,如果你的企業(yè)基礎(chǔ)架構(gòu)主要是IBM或Oracle,那么最好選擇DB2 Everyplace 或Oracle9i Lite 移動(dòng)數(shù)據(jù)庫。 移動(dòng)數(shù)據(jù)庫和同步解決方案是高可靠性移動(dòng)應(yīng)用程序的重要組件。他們提供了新的而且有前途的偶然連接移動(dòng)應(yīng)用程序范例。在閱讀完本文后,你應(yīng)該已經(jīng)能夠使用JDBC和PointBase APIs設(shè)計(jì)和執(zhí)行移動(dòng)數(shù)據(jù)庫應(yīng)用程序。由于移動(dòng)數(shù)據(jù)庫運(yùn)行在小設(shè)備上,當(dāng)選擇商業(yè)產(chǎn)品時(shí)你需要仔細(xì)權(quán)衡特征和儲(chǔ)存器足跡而不是性能。 關(guān)于作者 Michael Yuan是德克薩斯州立大學(xué)University of Texas的博士研究生,他是德克薩斯州立大學(xué)電子商務(wù)研究中心的一名研究助理同時(shí)也是開發(fā)源碼的一名Java開發(fā)者。他是即將由Prentice Hall出版的Java 移動(dòng)企業(yè)應(yīng)用程序Java Mobile Enterprise Application一書的作者,這本書將在2003年秋天發(fā)行。 Resources · Download the source code for this article's PointBase ContactManager sample application (you need to download PointBase Micro database and UniSync to run the sample): http://www.javaworld.com/javaworld/jw-06-2003/wireless/jw-0606-wireless.zip · For more detailed discussion and complete source code analysis, preview Michael Yuan's upcoming book, Java Mobile Enterprise Application Development: http://www.enterprisej2me.com/books.php · The JDBC specification: http://java.sun.com/prodUCts/jdbc/ · The JDBC optional package: http://java.sun.com/products/jdbc/download.html/#cdcfp · The supported JDBC API in PersonalJava: http://java.sun.com/products/personaljava/ · HSQL Database Engine (check out the Sharp Zaurus page): http://hsqldb.sourceforge.net/ · Sybase iAnywhere Solution's SQL Anywhere Studio (including Adaptive Server Anywhere and UltraLite deployment option): http://www.sybase.com/products/mobilewireless/anywhere · IBM DB2 Everyplace: http://www-3.ibm.com/software/data/db2/everyplace/ · Oracle9i Lite database: http://otn.oracle.com/products/lite/content.html · PointBase Micro database and UniSync server: http://www.pointbase.com/home.shtml · For more articles on J2ME and wireless development, browse the Micro Java section of JavaWorld's Topical Index: http://www.javaworld.com/channel_content/jw-micro-index.shtml · More Wireless Java articles: http://www.javaworld.com/columns/jw-wireless-index.shtml · Browse the Java Database Connectivity (JDBC) section of JavaWorld's Topical Index: http://www.javaworld.com/channel_content/jw-jdbc-index.shtml · Michael Yuan also authored the following JavaWorld articles: o "Build Database-Powered Mobile Applications on the Java Platform" (January 2002) o "Track Wireless sessions with J2ME/MIDP" (April 2002) o "Java Tip 126: Prepare Cross-Server Database Access Methods with JDBC" (April 2002) · Browse the Development Tools section of JavaWorld's Topical Index: http://www.javaworld.com/channel_content/jw-tools-index.shtml · Browse JavaWorld's Product Reviews index page: http://www.javaworld.com/news-reviews/jw-nr-product-reviews.shtml · Sign up for JavaWorld's free weekly Micro Java email newsletter: http://www.javaworld.com/subscribe