前段时间在思考和考察将来JavaEye门户网站运行在什么数据库上面,因此都考察了一遍。当前流行的关系数据库分类如下:

1、大型关系数据库:Oracle,DB2

Oracle是当之无愧的首选;DB2从来没有用过,也不打算去用。

2、中大型关系数据库:SQL Server,Sybase,SAPDB

不管MS再怎么吹嘘,不管MS市场做的有多好,SQL Server还是比Oracle差一个档次,这也是不争的事实。Sybase是一个半死不活的状态没有什么好说的。SAPDB是一个好东西,但是可惜了。

3、中型关系数据库:MySQL,PostgreSQL

这两个数据库现在用的好广泛阿!

4、中小型关系数据库:Firebird,Interbase

不知道为什么,我对Borland这两个数据库一直缺乏好感

5、小型和嵌入式关系数据库:MS Access,MSDE,HSQLDB,Pointbase,Cloudspace,SQLlite,Mocki等等

其实可以很明显看出来,数据库这个市场和操作系统,应用服务器软件都很不一样。数据库这个市场的商业软件产品一般都比较出色,而开源软件和商业软件又有相当大的差距。根据JavaEye门户网站的要求,一一评价和选择数据库:

1、Oracle,DB2

如果有足够的预算,当然Oracle是唯一的选择。但是现在我只能选择免费或者花费最少的方案。如果将来赚了钱,并且需要诸如OLAP,数据仓库技术的支撑,可以再考虑在后端使用Oracle,现在就不能考虑了;

DB2,我没有什么理由去选择它,选择它不如选择Oracle。

2、SQL Server,Sybase,SAPDB

SQL Server只能运行在Windows平台上,并且安全性非常之糟糕,简直不用思考就直接排除;

Sybase一个半死不活的公司,又是商业产品,没有什么理由去选择;

SAPDB本来是我心目中的首选,可惜的是经过一番考察,我发现MySQL Inc自从SAP公司接手了SAPDB之后,再没有后续的开发计划,而只是维护,并且准备把SAPDB的功能往MySQL迁移。这样我只能放弃 SAPDB。可惜了这么好的一个东东。SAPDB本来是SAP公司做的一个商业数据库,后来发现市场上面没有办法和Oracle他们竞争,最后就开源了。所以SAPDB是唯一的开源免费,但是具备商业品质的数据库。

3、MySQL,PostgreSQL

MySQL本来的缺点是:
1)基于文件级别的数据库,数据容量不够大;
2)缺乏必要的功能:子查询,视图,存储过程,引用完整性,触发器等等
3)并发访问的负载能力不行
4)整个体系结构太简单,不具备足够的商业品质

但是在我考察了4.1和5.0.3beta版以后,感觉已经改进了大部分缺点了:
1)4.1版本已经具备子查询,5.0.x版本具备了视图,存储过程,触发器,引用完整等等功能;
2)InnoDB具备行级锁定功能;
3)InnoDB在数据容量上有很大的提高,克服了MyISAM的文件数据库的容量问题;
4)InnoDB的并发负载能力相当不俗,完全可以满足我的要求;
5)InnoDB甚至已经支持RAW IO,让我刮目相看

此外,MySQL也具备很多优势:
1)多线程数据库服务器,性能相当好;
2)外围开发工具和管理工具的支持非常丰富;
3)数据库本身的管理功能也相当完备,例如联机热备份,监视工具,binlog等等;
4)数据库的性能调整参数很多,给了管理员足够的性能调优的手段;
5)数据库支持的高级特性也相当吸引人和重要,例如高级同步复制,cluster,等等(虽然和Oracle相比,差距还是巨大的)

可以这样说,MySQL5.0.3beta的功能加上采用InnoDB表类型,还有MySQL本身丰富的外围工具,高级特性支持,性能调优支持和管理备份监视功能等等,已经可以满足我对JavaEye.com门户网站支撑数据库的绝大部分要求。

附带一提的是:MyISAM表类型给我的印象非常差,负载能力,表容量,并发锁,事务等等都完全不足以满足企业应用的需要,根本就是一个toy!而InnoDB可以说让我相当满意,具备了一个商业数据库的品质,大致相当于Oracle7的水平。

当然MySQL仍然有一些我希望有但是不支持的功能,例如OLAP,数据库仓库,XML DB等等,但是毕竟不可能要求更多了。当涉及到这些功能的时候,后端再连接一个Oracle吧。

PostgreSQL是一个口碑很好的开源数据库,很早就全面支持关系数据库的所有特性,但是如果和MySQL5相比来说,就没有任何优势可言了,缺点到不少:
1)进程模型,而不是线程模型,性能非常成问题
2)外围开发工具和管理工具支持太少
3)数据库本身的性能调整参数太少
4)不支持联机热备份
5)不支持高级复制,cluster

简单来说,就是功能虽然齐备,但是完全不具备商业品质。

4、Firebird,Interbase

中小型数据库已经不能满足我的需要了,Firebird和Interbase面向的市场和MySQL/PostgreSQL就很不一样,我感觉比较尴尬,网站型应用有MySQL,小型应用有下面的小型数据库,而他们似乎只能充当小型数据库的加强版而已。

5、MS Access,MSDE,HSQLDB,Pointbase,Cloudspace,SQLlite,Mocki

这些数据库分为三类:
1)Windows平台的桌面和嵌入式数据库MS Access和MSDE(甚至包括FireBird,Interbase),对于这些只能跑Windows平台的数据库我一般是不考虑的;
2)纯Java嵌入式数据库:HSQLDB,Pointbase,Cloudspace,Mocki,这些东西用来开发和单元测试,演示,CD发行,嵌入式应用,都是再好不过的东西了,而我显然更倾向于开源免费又不受任何公司控制的HSQLDB;
3)其他类型的嵌入式数据库:SQLite,这个东西也很棒,PHP5内置了SQLite支持,CVSTrac也使用SQLite,我认为是一个通用的,跨平台的,嵌入式环境的首选数据库,因为他使用于各种操作系统平台,各种编程环境。