(来源:http://www.ccidnet.com)
一、概述 就象关系数据库一样,市场上有许多面向对象的数据库(Object-Oriented Database,OODB)可供选择。然而,OODB在价格、功能、特色和体系上没有什么统一的标准。本文将帮助你理解各种OODB系统之间的一些差别,在为应用选择合适的OODB时,帮助你缩小挑选的范围。
根据标准的不同,我用于评估这些产品的参考资料也是五花八门。在大多数情况下,本文的评价以个人经验和看法为基础;另外一些细节直接从评测软件或供应商提供的数据资料获得。在作出选择之前,务必针对你的应用进行全面的测试。毕竟,你我看法可能有所不同。
我们将要分析的四种OODB产品是
ObjectStore、
Versant Developer Suite、
Poet FastObjects和
Objectivity。每一种产品将从以下几个方面进行评估:
-
价格和许可
-
顺从性
-
兼容性
-
特色
-
性能
- 可伸缩性和可用性
|
二、价格和许可 工程成本包括两个方面:初始成本和维护费用。初始成本往往在评估中起支配作用,但象年度支持、联机讨论、新手培训等问题都应该成为产品成本的考虑因素。即使和它的竞争者大型RDBMS相比,OODB的价格通常显得很昂贵。
标准 |
考虑… |
评估软件 |
可免费下载的、全功能的试用软件。 |
开发版许可价格 |
低价格,以用户数量为基础的许可。 |
产品许可价格 |
低价格,按照CPU数量为单位的许可,低廉的年度维护费用。 |
联机支持 |
负责的技术支持人员,大量有用的技术说明、示范和论坛。 |
活跃的用户社团 |
大量的热心用户,新闻组里丰富有益的活动,非官方网站的支持。 |
三、顺从性 和关系数据库相比,OODB一般对顺从标准的要求不是那么严格。大多数OODB都用自己独特的方法实现各种特色功能。由于还没有明确的标准评价OODB,所以对象数据库管理组织(Object Database Management Group,
ODMG)的标准是当前最好的准绳。但各个OODB各自为政却带来了一些麻烦,要找出一个完全顺从ODMG 2.0或3.0规范的OODB产品很困难(与已经有一年历史的3.0规范相比,2.0规范是一个相当宽松和不完善的规范)。也许在不远的将来,我们将用Java Data Object(<descript></descript>
JDO)规范评价Java OODB。
标准 |
考虑… |
对“对象定义语言”(ODL)的顺从 |
完全遵从ODMG 3.0规范有关对象定义的规范。 |
对“对象查询语言”(OQL)的顺从 |
完全遵从ODMG 3.0规范有关查询的规范。 |
对Java的顺从性 |
完全遵从ODMG 3.0规范意味着正确实现Java API/绑定。 |
对C++的顺从性 |
完全遵从ODMG 3.0规范意味着正确实现C++ API。 |
对Smalltalk的顺从性 |
完全遵从ODMG 3.0规范(如果你的系统不太可能用到Smalltalk,那么这只是一个可选的标准)。 |
四、兼容性 无论是语言还是平台,工程对可伸缩性的要求会日益增加。OODB不应该在任何一方面影响这种可伸缩性。然而,平台支持的代价很昂贵,它要求进行广泛的测试和大量的文档说明。因此,一些供应商的产品只支持数量很少的平台。要找出一个和各种主流OO语言(如C++、Java、Smalltalk)紧密结合的方案是相当困难的。
标准 |
考虑… |
支持的平台 |
广泛的平台支持——我总是考虑三个关键的平台:Linux,Win2000,和Solaris。你优先考虑的平台可能有所不同。 |
Java集成 |
广泛的JDK支持,紧紧跟踪最新的JDK规范。 |
C++集成 |
广泛的编译器支持 |
持久类的特殊化 |
避免紧密结合——寻找那些不要求修改代码中持久类的数据库。这是一种与偏好有关的选择,所以你应该认真研究处理后扩展和扩展/实现方式相比的优缺点。 |
可嵌入的版本 |
只占用少量的磁盘空间、RAM;具有取消一些非核心功能的能力。 |
五、特色 每一种数据库方案都有自己的一些独特的功能。下面我特别指出一些核心功能,因为这些功能对于开发工程来说具有很高的价值:
标准 |
考虑… |
数据库浏览 |
管理数据库、修改内容、更新模式和生成内容报表的能力。 |
客户端缓冲 |
改善“热点”数据库响应速度的能力;在确保对象同步的前提下,使得对数据库的提取操作减到最少。 |
数据库安全 |
用户、用户组访问控制,最好在对象(如果不是容器的话)的层次上进行。 |
XML支持 |
无缝地从数据库提取、向数据库插入XML的工具。 |
IDE集成 |
和TogetherSoft之类提高开发效率的环境集成能够提高开发效率。
|
六、性能 在性能的某些方面,OODB占有优势;但在其他方面,OODB又有所不足。在这里提供每一种产品详细的性能测试数据显得过于冗长,但理解可能影响性能的体系和功能方面的局限是很重要的。
标准 |
考虑… |
加锁策略 |
应用-对象级的加锁机制能够带来很大的方便,但页面级的加锁机制在某些条件下能够带来性能上的飞跃。 |
负载平衡 |
透明地分布数据库、调用远程服务器上的方法、在并发线程/访问之间共享对象的能力。 |
最大的数据库大小 |
越大越好。 |
事务支持 |
检查点:由多个线程共享一个事务,一个线程占用多个事务,嵌套事务;当某个给定产品的实现影响了你的应用时,确保你自己理解了结合客户端缓冲时客户端/服务器端同步的工作机制。 |
有关查询/性能的信息 |
提取这些信息的能力,它能够帮助你找出性能瓶颈;OODB提供的优化和调整选项通常要比RDB少,但一些帮你提取性能信息和解释查询执行计划的工具仍很有用。 |
七、可伸缩性和可用性 虽然并非每一个工程都要求有企业级的恢复、可用性、可伸缩性功能,了解你所选择的OODB方案能够随着工程一起发展而提供这方面的能力是值得的。
标准 |
考虑… |
失败转移 |
主服务器出现问题时,透明地切换到冗余数据库。 |
负载平衡 |
把负载分布到冗余服务器、把对象分割到多个服务器、同步多个客户端对象缓冲之间数据视图的能力。 |
复制和增量备份 |
无缝地复制数据,支持负载平衡和恢复的能力。 |
专用的查询引擎(Ad hoc query engine) |
丰富的查询语言,允许对数据的快速访问;理想情况下,它应该能够跨越没有直接关联的对象连接数据。 |
八、产品评论 下面,我按照前文提出的标准评估以下产品:
请参考
Cetus OODB area,那里有一个相当新的OODB供应商清单。
标准 |
ObjectStore |
Versant Developer Suite |
Poet |
Objectivity |
背景信息 |
供应商 |
Object Design |
Versant |
Poet |
Objectivity |
产品主页 |
ObjectStore |
VDS |
FastObjects |
Objectivity |
技术参考[29] |
Spec 或 PDF data sheet
|
Overview 或 manuals
|
Java 或 C++
|
PDF overview 或 specific data sheets
|
版本 |
6.0 |
6.0 |
t7 8.0[16] |
6.0 |
价格和许可 |
试用版本 |
30天试用[1] |
60天试用 |
功能限制 |
90天试用 |
许可费用 |
[2] |
[2] |
[2] |
[2] |
联机支持 |
尚可[3][9] |
尚可[9] |
好[19] |
很好 |
用户社团[23] |
中等[4] |
中等 |
较小 |
中等 |
顺从性 |
ODL顺从性 |
N |
N |
N |
不完整的2.0/3.0支持 |
OQL顺从性 |
N |
N[10] |
ODMG 3.0[17] |
N |
Java接口 |
遵从ODMG 3.0 |
ODMG 3.0 |
ODMG 3.0 |
ODMG 3.0 |
C++接口 |
支持 |
ODMG 3.0 |
N/A |
不完整的2.0/3.0支持 |
Smalltalk接口 |
N/A |
N/A |
N/A |
ODMG 3.0 |
兼容性 |
支持的Unix操作系统 |
Linux,Solaris,HP-UX,IRIX,AIX,Tru64 [ref]
|
Linux,Solaris,HP-UX,IRIX,SGI,Tru64 [ref]
|
Linux,Solaris,HP-UX[ref]
|
Linux,Solaris,HP-UX,IRIX,AIX,Tru64 [ref]
|
支持的Windows操作系统 |
98,NT4,2000 [ref]
|
NT4,2000 [ref]
|
98,NT4,2000 [ref]
|
98,NT4,2000 [ref]
|
JDK要求 |
1.0,1.1–1.3[22] |
1.2,1.3 |
1.1-1.3 |
1.22,1.3 |
持久类的特殊化 |
N[5] |
N[5] |
N[5] |
Y[24] |
可嵌入的版本 |
Y |
N |
Y[18] |
N |
功能 |
数据库浏览器 |
Y |
Y |
Y |
Y |
客户端缓冲 |
Y |
Y |
Y |
Y |
数据库安全 |
数据库或者段的用户/组控制 |
数据库的用户控制[14] |
特定类和数据库的用户/组控制 |
数据库的用户控制 |
XML支持 |
Y |
Y[15] |
部分[20] |
部分[20] |
性能 |
加锁策略 |
数据库,页,或者对象 |
对象级 |
对象级 |
容器级[25] |
最大的数据库大小[7] |
数百个GB? |
数十个GB到数百个GB?[12] |
? |
根据报告,它达到了TB级 |
事务支持 |
死锁检测,MVCC [8] |
分布式事务管理(类似于MVCC的概念) |
检查点,共享或并行的事务,嵌套事务 |
检查点,死锁检测,共享或并行的事务 |
提供有关查询/性能的信息 |
Y |
N[13] |
N |
N[26] |
可伸缩性 |
失败转移(failover) |
Y |
Y |
Y |
可选[27] |
负载平衡 |
部分[6] |
部分[11] |
部分[21] |
可选[27] |
复制和增量备份 |
Y |
Y |
Y |
可选[27] |
专门的查询引擎(Ad hoc query engine) |
没有OQL。使用集合和查询对象 |
Y[10] |
Y (OQL) |
Y[28] |
■ 结束语 我希望自己还没有给人以OODB狂热鼓吹者的印象——对于我所使用的大多数应用,我认为应用OODB带有一定的风险。然而,一旦你理解并熟悉了OODB,它们可以成为很方便的工具。我个人比较看好Poet和ObjectStore,但我觉得它们都很有用。
■ 注解
[1] |
只提供单实例个人版(Single-instance Personal Edition,PSE)供下载。 |
[2] |
报价可以从销售代表处获得。 |
[3] |
部分支持服务只提供给有效维护合同的拥有者访问。 |
[4] |
社团规模只相对其他OODB产品而言。OODB的用户社团远远小于关系数据库的用户社团。 |
[5] |
持久类必须进行事后处理。 |
[6] |
多个数据库之间的负载平衡看来不太可能。相反,处理通过客户端缓冲得以分布,它把更多的逻辑和计算任务透明地移到了客户端,从而减小了服务器的负载。 |
[7] |
这些数据未经证实,主要从供应商的声明获得。在讨论数据库大小的时候,对象的复杂性、大小、“合理的应答时间”等问题都是必须考虑的因素。 |
[8] |
多版本并发控制(Multiversion Concurrency Control,MVCC)是一种非标准的技术,在并发读取/写入操作期间用来维持缓冲客户端和服务器端数据视图的一致性。 |
[9] |
可以从大量在线演示、FAQ、论坛获益,所有这一切都对现有和潜在用户开放。 |
[10] |
实现了一种私有的VQL语言,它和OQL有一些共同点。 |
[11] |
通过复制实现部分负载平衡能力;根据推测,负载平衡可能通过把请求重定向到多个数据库实现,但这一点未经证实。多个数据库之间的透明复制确保了每一个OODB上都有一份最新的数据。 |
[12] |
需要64位的版本,以便超越大量在内村、记录计数等方面的2^32限制;Versant的64位版本已经构造完毕,但还没有在所有它所支持的平台上经过验证。 |
[13] |
提供一些用于查询调整和计时的工具。 |
[14] |
如果不是我在什么地方错过,它似乎没有提到粒度更小的安全机制或者是在API中提供这方面的能力。我找到特别提及的只是通过OS强制的数据库文件权限实现的数据库级访问控制。 |
[15] |
需要单独提供的工具。 |
[16] |
Poet分三种形式:t2(实时嵌入式Java),e7(嵌入式Java/C++),以及t7(企业Java/C++)。版本号没有明确显示,t7的v8.0得自文件的版本号,当前是8.0.0.19。 |
[17] |
不能保证它完整地支持ODMG 3.0 OQL,但覆盖范围看来相当广泛。 |
[18] |
包含一个C++或Java的嵌入式版本,以及一个Java的实时嵌入式版本。 |
[19] |
联机支持网站community.fastobjects.com的内容非常全面,但速度常常很慢。我拥有高速连接,但它有规律地返回页面超时错误。
|
[20] |
我只能通过命令行接口使用批量导入/导出功能。 |
[21] |
没有分布式功能的任何明显标记,而且我也没有用过一个分布式的配置。如果Poet的配置中数据库复制带有“reader scalability”选项,负载平衡可以在某种程度上得以实现,使得查询可以对只读的从属数据库进行。 |
[22] |
至少JDK 1.2看来最好,你将得到更好的集合支持和避免一些已经有报道的“quirk”问题(未能肯定是否为JDK 1.1解决了这些问题)。 |
[23] |
很难进行评估。我从收入和Internet/新闻组的讨论入手分析。请把它看成是一种猜测。 |
[24] |
持久类的标识或者是它从ooObj派生,或者它实现IooObj接口。 |
[25] |
虽然对整个容器加锁听起来吓人,但它的基本思想是,它会显著减少加锁服务器的负载。 |
[26] |
通过API调用和统计功能提供一些运行时查询调试能力。 |
[27] |
一些资料,例如这一份说明,显示出这些选项会增加成本。
|
[28] |
没有提供类似OQL的等价语言。SQL++是一种遵从SQL的功能,允许针对OODB进行SQL查询;容器支持一个scan()方法,以及支持“谓词查询语言”表达式(Predicate Query Language)。 |
[29] |
这四种产品都提供评估版供下载。下载软件包附带的文档和示例一般都比较完善。 |
分享到:
相关推荐
1、综合运用Java程序设计课程和其他相关课程的理论和知识,掌握面向对象程序设计的一般方法、常用技术及技巧,树立良好的软件设计思想,培养分析问题和解决实际问题的能力; 2、学会从程序设计的方法及要求出发,...
9. 面向对象系统设计阶段,下列哪项是UML中的动态(行为)模型 [单选题] * 电子商务系统设计与分析全文共17页,当前为第2页。 A. 类图 B.用例图 C.包图 D.交互图(正确答案) 10. UML中定义的( )关系是指两个事物之间...
• 面向对象数据库、分布式对象的概念 4.安全性知识 • 安全性基本概念 • 防治计算机病毒、防范计算机犯罪 • 存取控制、防闯入、安全管理措施 • 加密与解密机制 •风险分析、风险类型、抗风险措施...
Java 是一种面向对象的编程语言,具有平台独立、多线程、动态加载类等特点。在本系统中,Java 技术用于服务器端编程,实现了系统的逻辑控制和数据处理。 Mysql 数据库 Mysql 数据库是系统的数据库管理系统。Mysql ...
本资源摘要信息是基于 2020 自学考试信息系统开发与管理试题及答案的知识点总结。 软件开发方法 * BSP 方法中,定义企业过程应该从三方面入手,它们是...* 在面向对象方法中,父类与子类共享数据与方法的机制是继承。
面向对象的开发方法包括面向对象的分析、面向对象的设计和面向对象的程序设计。( √) 7. 软件危机的主要表现是软件的需求量迅速增加,软件价格上升。(×) 8. 软件工具的作用是为了延长软件产品的寿命。(×) 9. ...
软件工程课程设计报告基于web在线作业提交批改系统知识点 一、课程设计概述 * 软件工程课程设计的目的:...同时,系统的设计和开发需要遵循面向对象的设计方法和敏捷开发方法,以确保系统的正确性、可靠性和安全性。
4)学习并熟练掌握面向对象的可视化编程语言。 5)完成系统的需求分析。 6)在需求分析基础上,根据分工,具体完成相应模块的设计。 7)输入实际数据,完成测试工作。 8)英文资料翻译。 9)撰写毕业论文。
(13) 面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个______。 答:实体 (14) 软件的需求分析阶段的工作,可以概括为四个方面:______、需求分析、编写需求规格说明书和需求评审。 答:需求获取...
(46) 面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是(C) A. 模拟现实世界中不同事物之间的联系 B. 强调模拟现实世界中的算法而不强调概念 C. 使用现实世界的概念抽象地思考问题从而自然地...
·面向对象程序设计 ·C语言以及C++(或Java)语言程序设计基础知识 2. 标准化基础知识 ·标准化的概念(标准化的意义、标准化的发展、标准化机构) ·标准的层次(国际标准、国家标准、行业标准、...
8.2.3 对象数据库 8.2.4 关系数据库 8.2.5 使用一个还是多个资源管理器 8.2.6 其他因素 8.2.7 选择和前进 8.3 方法 8.3.1 自定义手工编码 8.3.2 自定义代码的代码生成 8.3.3 元数据映射(对象关系(O/R)映射工具) ...
40.试述面向对象方法的特点。 41.试述系统分析的任务和工作内容。 42.简述系统总体设计的内容。 43.简述系统实施的主要内容。 五、应用题(本大题共2小题,每小题10分,共20分) 44.某仓库发货方案如下:欠款时间在30...
2. 具备扎实的 Java 基础,深入理解 OOP 编程思想,具有良好的编码习惯:这项技能体现了个人对 Java 语言的熟悉度,能够正确地使用面向对象编程思想和编写高质量的代码。 Web 开发技术 3. 熟练使用 Jsp,Javabean...
软件的设计思想是基于面向对象的设计思想,使用了程序流程框图来描述软件的逻辑功能。软件的逻辑功能程序包括数据输入、数据处理、数据输出等方面。软件的调试运行结果显示了软件的正确性和可靠性。 打字软件(A2)...
(1)工程方法:结构化方法、JSD方法、面向对象方法。 (2)软件工具:具有自动化特征的软件开发集成支撑环境。 (3)工程过程:在软件工具支持下的一系列工程活动,基本活动是软件定义、软件开发、 软件验证、软件...
软件设计有多种方法,包括面向过程的设计方法、面向对象的设计方法、面向服务的设计方法等。面向过程的设计方法是将软件系统分解成多个小的过程,然后设计每个过程的架构和模块。 软件设计的原则 软件设计需要遵守...
继承(:面向对象中)把若干个对象组成一个层次结构的系统,下层的子类具有和上 层分类相同的特性。 3.业务流程优化: 根据系统调查阶段,从业务全过程的角度摸清现状,找出问题的关键点,对业务流程进 行分析和改进...