翻译作者:jungleguo2003-11-15
原文:http://www.javaworld.com/javaworld/jw-06-2003/jw-0606-wireless-p3.html
当然PointBase并不是J2ME移动数据库产品的唯一选择。在本文的剩余部分我会比较和讨论几种主流的竞争者。在开始以前先让我来阐述一下这个产品的前景。
高端设备上的JDBC数据库
对于运行PersonalJava或PersonalProfile的高端设备,数据库能够通过JDBCAPI被访问。JDBC数据库对于程序来说是最容易的数据库类型。所有的厂商已经至少有一个这种种类的产品。最大的挑战是如何平衡这些功能。我们想要最小而且最快的数据库。它能够支持应用程序所需功能的准确集合。
MIDP设备上的轻量级数据
CLDC(有限连接设备配置ConnectedLimitedDeviceConfiguration)/MIDP并不支持JDBC接口。在MIDP设备上支持复杂数据管理的两个通用方法是:
执行非常轻量的数据库和RMS上的类似JDBC的访问API。这个方法很耗费资源,但根据开发者开发能力和性能支持证明是最好的。
直接扩展RMS类并在扩展的类上执行简单的行序列化,数据访问,索引/搜索和同步方法。这个扩展类是RMS上的一个细小的层次。它能模拟关系表的行为。
在产品评论的章节里我将讨论这两种方法。
同步服务器
众所周知,同步是移动数据库的一个关键性能。大多数数据库厂商有他们自己专有的同步服务器。这些服务器提供许多附加功能来优化在移动环境下的同步过程。同步服务器的重要性能包括如下几点:
l智能冲突解决方案
l带宽减少
l端到端编密码
l后台引擎性能调整
l异步和可扩展更新
接下来的几章里我将检查和比较几种主流厂商的产品。
HSQL数据库引擎
开放源码的数据库引擎?DHSQL是基于ThomasMueller的HypersonicSQL项目。它完全是由Java是编写的同时也是一种广泛用于嵌入式的数据库。它被包含在许多J2EE应用服务器中。在移动设备上,HSQL运行在PersonalJava和FP/PP平台上。HSQL是完全免费的。你能自由地将它重新部署到你的应用程序中,这对移动应用程序来说是容易的。
HSQL提供一个支持%95JDBC接口和所有JDBC数据类型的JDBC驱程。它支持事务,外键甚至Java存储过程。在HSQL中的表能寄存在内存中和保存在磁盘文件中。HSQL只有少于160-KB的存储器足迹footprint。它也为PersonalJava设备发布了一个数据库管理控制台(经过SharpZaurus上的测试)
然而,HSQL缺少一些商业移动数据库上所需的高级性能和安全功能。更重要的是,HSQL不能提供任何同步解决方案。它也缺少一个为MIDP设备的解决方案。
PointBaseMicro
PointBase是一个纯Java嵌入式数据库方面的主流厂商。PointBaseMicro数据库能运行在FP/PP/PersonalJava和MIDP平台上。
在FP/PP/PersonalJava平台上PointBaseMicro数据库仅用91KB存储器足迹就能支持大多数JDBC和SQL功能。它也支持例如数据库编密码这样的高级功能。它不支持存储过程和接口CallableStateMEnt。因此MIDP不支持JDBC,PointBase为MIDP提供它自己的轻量级类似JDBC的API。PointBaseMicro数据库的MIDP版本提供了一个用浏览器打开的MIDlet数据库控制台。
PointBaseMicro数据库通过UniSync同步服务器能容易地同服务器端PointBase嵌入式数据库和Oracle数据库同步。
SybaseiAnywhere解决方案
在膝上型电脑上的轻量级数据库ianywhere的SQLAnywhereStudio已经拥有巨大的市场份额。在普遍设备上的移动数据库市场它也有一个强大的份额。AnywhereSQLStudio的自定义数据库生成器是它一个关键创新。它让用户而不是数据库厂商决定如何平衡数据库存储器足迹和它所支持的功能。
在AnywhereSQLStudio中用户能指定将在应用程序中调用的SQL状态SQLstateMEnt。它根据用户对根本性质和事务功能的选择生成一个自定义数据库。所生成的数据库是一个纯Java类以及伴随的一系列用户应用程序能调用的API。使用iAnywhereMobiLink同步服务器的数据同步API也能加入到自定义数据库中去。
除了自定义数据库生成器,iAnywhere也提供大存储器足迹和移动数据库的一般用途。它包括支持Java储存过程Javastoredprocedure在内的许多安全,优化和可用性方面的功能。这些数据库为了达到更好的性能天生就运行在流行的移动平台上。SybaseiAnywhereSQLStudio现在仍然不能支持MIDP数据库的自动生成。
IBMDB2Everyplace
IBMDB2Everyplace是IBM在移动数据库的礼物。对于IBM的客户来说,DB2Everyplace非常好地整合了其他IBM企业组件(例如,DB2UniversalDatabase和WebSphereMQEveryplace)和IBM开发工具(例如,IBMWebSphereStudioDeviceDeveloper)。DB2Everyplace本身运行在包括PalmOS,SymbianOS,PocketPC,QNX软件系统和嵌入式Linux在内的许多平台上。DB2Everyplace支持加密数据域和表存储优化功能。
在MIDP平台上,DB2Everyplace有一个叫FastRecordStore的产品。它仿效在MIDPRMS记录存储之上的可索引和可搜索的关系表。
DB2Everyplace数据库和FastRecordStore通过IBM同步引擎与后台数据库同步。DB2Everyplace也附带一个叫MobileApplicationBuilder的工具,它允许开发者可视化地创建DB2Everyplace应用程序。
Oracle9iLite
Oracle9iLite是Oracle在移动数据库上的产品。它可运行在PlamOS,PocketPC,SymbianOS和Win32等平台上。Win32这个版本是为了能运行在膝上电脑上并支持JDBC,多用户模式以及Java存储过程。Oracle9iLite的PocketPC和SymbianOS版本支持JDBC。而PalmOS版本仅支持Oracle自身专用的OKAPI(对象核心APIObjectKernelAPI)和ODBC(开放数据库连接OpenDatabaseConnectivitiy)。Oracle9iLitesuite包括一个移动开发工具MobileDevelopMEntKit,它能够根据用户自定义需求自动生成和打包移动数据库应用程序。目前它只能生成本身客户端应用程序。
Oracle9i移动数据库通过Oracle移动服务器和后台Oracle数据库服务器同步。如果我们使用Oracle9iLite移动开发工具来创建应用程序则移动服务器会自动为这个应用程序生成同步逻辑。Oracle9iLite支持任何基于TCP/IP的网络上的同步,包括HTTP,CDPD(单元数字包数据cellulardigitalpacketdata),802.11b无线局域网。通过使用移动服务器的开放传输APIOpenTransportAPIs,我们也能增加新的传输。另外Oracle移动服务器支持非同时的同步。在高峰期每个设备只是把同步内容提交到一个队列中然后退出。异步操作是可扩展解决方案的关键。
在MIDP平台上Oracle提供SODA(简单对象数据库访问SimpleObjectDatabaseAccess),这个产品是基于RMS的。SODA实际上是一个支持MIDP设备的面向对象数据库。它允许存储,搜索和恢复类似JavaBean的数据对象。
选择正确的移动数据库
选择正确的移动数据库产品是个复杂的商业决定。由于移动数据库嵌入在客户端应用程序中,你需要为你所开发的每个产品支付版税。为减少总开销而签订一个好的合同是非常重要的。由于同步解决方案所特有的性质每个产品都在某种程度上锁定了厂商。因此开发人员不仅应该考虑到产品的技术优点而且应该考虑到厂商的一贯声誉和稳定性。例如,如果你的移动客户端需要MIDP和PersonalProfile数据库,你应该选择同一厂商中更好传输率的产品和更易管理的同步解决方案。
PointBase和SybaseiAnywhere提供极好的移动数据库解决方案。然而,如果你的企业基础架构主要是IBM或Oracle,那么最好选择DB2Everyplace或Oracle9iLite移动数据库。
移动数据库和同步解决方案是高可靠性移动应用程序的重要组件。他们提供了新的而且有前途的偶然连接移动应用程序范例。在阅读完本文后,你应该已经能够使用JDBC和PointBaseAPIs设计和执行移动数据库应用程序。由于移动数据库运行在小设备上,当选择商业产品时你需要仔细权衡特征和储存器足迹而不是性能。
关于作者
MichaelYuan是德克萨斯州立大学UniversityofTexas的博士研究生,他是德克萨斯州立大学电子商务研究中心的一名研究助理同时也是开发源码的一名Java开发者。他是即将由PrenticeHall出版的Java移动企业应用程序JavaMobileEnterpriseApplication一书的作者,这本书将在2003年秋天发行。
Resources
·Downloadthesourcecodeforthisarticle'sPointBaseContactManagersampleapplication(youneedtodownloadPointBaseMicrodatabaseandUniSynctorunthesample):
http://www.javaworld.com/javaworld/jw-06-2003/wireless/jw-0606-wireless.zip
·Formoredetaileddiscussionandcompletesourcecodeanalysis,previewMichaelYuan'supcomingbook,JavaMobileEnterpriseApplicationDevelopMEnt:
http://www.enterprisej2ME.com/books.php
·TheJDBCspecification:
http://java.sun.com/products/jdbc/
·TheJDBCoptionalpackage:
http://java.sun.com/products/jdbc/download.html/#cdcfp
·ThesupportedJDBCAPIinPersonalJava:
http://java.sun.com/products/personaljava/
·HSQLDatabaseEngine(checkouttheSharpZauruspage):
http://hsqldb.sourceforge.net/
·SybaseiAnywhereSolution'sSQLAnywhereStudio(includingAdaptiveServerAnywhereandUltraLitedeployMEntoption):
http://www.sybase.com/products/mobilewireless/anywhere
·IBMDB2Everyplace:
http://www-3.ibm.com/software/data/db2/everyplace/
·Oracle9iLitedatabase:
http://otn.oracle.com/products/lite/content.html
·PointBaseMicrodatabaseandUniSyncserver:
http://www.pointbase.com/hoME.shtml
·FormorearticlesonJ2MEandwirelessdevelopMEnt,browsetheMicroJavasectionofJavaWorld'sTopicalIndex:
http://www.javaworld.com/channel_content/jw-micro-index.shtml
·MoreWirelessJavaarticles:
http://www.javaworld.com/columns/jw-wireless-index.shtml
·BrowsetheJavaDatabaseConnectivity(JDBC)sectionofJavaWorld'sTopicalIndex:
http://www.javaworld.com/channel_content/jw-jdbc-index.shtml
·MichaelYuanalsoauthoredthefollowingJavaWorldarticles:
o"BuildDatabase-PoweredMobileApplicationsontheJavaPlatform"(January2002)
o"TrackWirelessSessionswithJ2ME/MIDP"(April2002)
o"JavaTip126:PrepareCross-ServerDatabaseAccessMEthodswithJDBC"(April2002)
·BrowsetheDevelopMEntToolssectionofJavaWorld'sTopicalIndex:
http://www.javaworld.com/channel_content/jw-tools-index.shtml
·BrowseJavaWorld'sProductReviewsindexpage:
http://www.javaworld.com/news-reviews/jw-nr-product-reviews.shtml
·SignupforJavaWorld'sfreeweeklyMicroJavaemailnewsletter:
http://www.javaworld.com/subscribe
******************************************************************
**********************************************************
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>