如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
开源数据库选型指南文章摘选自来自《开源技术选型手册》第17章作者:何伟平如何选择数据库:从我自己工作这些年的经验来看,数据库选型基本上都是从如下几个方面进行考虑的:稳定性,包括软件的运行稳定性和开发的稳定性,像老牌的Informix被收购导致Informix离开数据库提供商的列表的案例,就是开发不稳定的例子;特性,包括标准兼容性、性能等;可靠性,包括数据库的额数据类型校验、数据完整性、事物等对ACID(原子性、一致性、独立性和持续性)的支持;应用定制,包括存储过程支持、数据库自身的扩展等;成本,主要指许可证和商业支持;用户经验,主要指用户群体,用户的使用经验,尤其是大型用户;开发者熟悉程度,针对应用开发商自身对相应数据库的熟悉程度。常见的开源数据库有PostgreSQL、MySQL、Firebird、SQLlite、BerkeleyDB(此产品已被Oracle购买)。特性比较:对SQL兼容性上,PostgreSQL和Firebird都做到了很大程度上兼容SQL2003,在SQL上兼容性上处于第一梯队,并且其ACID事物系统经历了相当长时间的考验。MySQL在很大程度上兼容SQL2003,但是仍然有不少目前还不兼容的方面,在将来的版本开发中还有一定的工作要做。SQLlite支持一个相当大的SQL子集,但是因为自身定位,还不是完全兼容SQL2003,将来估计也不会全面兼容SQL标准。BerkeleyDB是一种哈希(散列)数据库,本身不兼容SQL语意。MySQL、SQLlite、BerkeleyDB都声称完全支持ACID事务系统,但在某种程度上都还比较新,需要一定的时间考验。稳定性方面,各种数据库都自称非常稳定,并且都号称有长期运行的证明,但是从细节上来看,不同的数据库对待数据完整性等方面有各自不同的行为。就ACID的严谨上,PostgreSQL、Firebird做得最好,MySQL等需要用户有意识地进行控制。举例:在MySQL里,直到5.0.45版,默认的时候执行下列操作:Createtabletestsmallint(f1smallint);Insertinfotestsmallint(f1)values(9999999);Select*fromtestsmallint;后都会发现,MySQL会不做任何错误报告地将用户输入数据截断。这个问题虽然可以通过配置MySQL使用严格的SQL模式纠正,但是从ACID的严谨性上,必须承认这个环节是误导用户的。在平台支持上,几乎所有前面提到的数据库都支持最主流的操作系统,比如Linux、BSD系列、Solaris、AIX、HP-UX、OSX和Windows等。其中PostgreSQL的支持范畴甚至包括VMS和OS2等。除非用户自己的系统实在罕见,否则,这些数据库都足以应对绝大部分用户。在性能上,PostgreSQL和Firebird都是基于多版本机制(MVCC)实现大并发的读写支持。MySQL的并发是一种基于行锁的机制,而SQLlite和BerkeleyDB基本上都属于锁机制。在读写相对均衡的并发环境里(经典的数据库类应用),PostgreSQL和Firebird要远胜于其他三种数据库,在面对大的并发均衡读写的时候,MySQL、SQLlite及BerkeleyDB都需要在应用层上做更多的事情。在比较读写不均衡的场合,尤其是近乎只读的场合,BerkeleyDB的性能最优,次之SQLlite,然后是MySQL,在这种场合下,PostgreSQL和Firebird谈不上有性能优势。从扩展性上来看,PostgreSQL因自身结构的优势,具有最高的扩展性,用户甚至可以通过扩展模块的方法自己扩展数据库核心功能,最著名的例子就是PostGIS;Firebird则拥有相当完整的存储过程支持,因此扩展性良好;而相比之下,MySQL的扩展能力一般,基本都只能围绕在客户端应用进行,对存储过程的支持只是最近一两年的事情,并且仍然非常受限制。其中SQLlite因为比较轻量,可以成为其他软件的扩展,与此类似,BerkeleyDB作为一种键值对的库风格的数据库,也可以嵌入到其他软件中。接口丰富性上,PostgreSQL、Firebird和MySQL都支持近乎全部流行的客户端接口,包括C、C++、Java、Perl、Python、PHP等。而SQLlite和BerkeleyDB更多的是支持C和C++层面的接口及各种语言的绑定。在成本方面,SQLlite的许可证是公共域许可,也就是说出了免责之外,原作者没有任何要求。PostgreSQL用的是BSD许可证,其基本概念是只要产品中包含了该版权的声明,用户就可以做任何事情。Firebird的许可证与PostgreSQL类似,但增加