作者:曹江华
数据库是linux应用中的主要部分。Linux上的主要数据库包括:商业数据库: Oracle、Sybase、DB2、Informix;自由软件数据库: MySQL、PostgreSQL、Msql等。
商业数据库
由于商业数据库有很好的技术支持,这里只简单介绍一下。
(1) IBM DB2 (http://www.software.ibm.com/data/db2/linux/)
(2) Informix (http://www.informix.com/informix/PRodUCts/linux/) Informix目前支持Linux是Informix SE,ESQL/C,Connect.
(3) Oracle (http://www.oracle.com/iplatform/linux/) Oracle 目前支持Linux的是Oralce 8i 、9i。
(4) Sybase (http://www.sybase.com/products/databaseservers/linux/index.Html) Sybase 目前支持Linux的是Adaptive Server Enterprise 11.9.2 。
(5)Ingres (http://www.cai.com/products/betas/ingres_linux/ingresii_qa.htm) CA目前支持Linux的是 Ingres II数据库.
自由软件数据库
1、MYSQL
MysQL是瑞典的T.c.X公司负责开发和维护的,它是一个真正的多用户、多线程SQL数据库服务器。MysQL是以一个客户机/服务器结构实现其功能的,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。SQL是一种标准化的语言,它使得存储、更新和存取信息更轻易。MySQL主要特点是快速、健壮和易用。MySQL的官方发音是“My Ess Que Ell”(不是MY-SEQUEL)。目前MySQL的最新版本是4.04,MySQL的网址是:http://www.mysql.com,MySQL的标志是一个小海豚。见图-1。
图-1
(1)MySQL的优点:
1. 它使用的核心线程是完全多线程,支持多处理器。
2. 有多种列类型:1、2、3、4、和8字节长度自有符号/无符号整数、FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、和ENUM类型。
3. 它通过一个高度优化的类库实现SQL函数库并像他们能达到的一样快速,通常在查询初始化后不该有任何内存分配。没有内存漏洞。
4. 全面支持SQL的GROUP BY和ORDER BY子句,支持聚合函数(COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、MAX()和MIN())。你可以在同一查询中混来自不同数据库的表。
5. 支持ANSI SQL的LEFT 0UTER JOIN和ODBC。
6. 所有列都有缺省值。你可以用INSERT插入一个表列的子集,那些没用明确给定值的列设置为他们的决省值。
7. MySQL可以工作在不同的平台上。支持C、C++、java、Perl、php、Python和TCL API。
(2) MySQL的缺点:
1、 MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变。
2、 MySQL的另一个主要的缺陷之一是缺乏标准的RI(Referential Integrity-RI)机制;Rl限制的缺乏(在给定字段域上的一种固定的范围限制)可以通过大量的数据类型来补偿。
3、 MySQL没有一种存储过程(Stored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制。
4、 MySQL不支持热备份。
5、 MySQL的价格随平台和安装方式变化。Linux的MySQL假如由用户自己或系统治理员而不是第三方安装则是免费的,第三方案则必须付许可费。Unix或Linux 自行安装 免费 、Unix或Linux 第三方安装 200美元,
需要一个应用组件 200美元 。
2、mSQL
mSQL(mini SQL)是一个单用户数据库治理系统,个人使用免费,商业使用收费。由于它的短小精悍,使其开发的应用系统非凡受到互联网用户青睐。mSQL(mini SQL)是一种小型的关系数据库,性能不是太好,对SQL语言的支持也不够完全,但在一些网络数据库应用中是足够了。 由于mSQL较简单,在运行简单的SQL语句时速度比MySQL略快,而MySQL在线程和索引上下了功夫,运行复杂的SQL语句时比mSQL,PostgreSQL等都 要快一些。MSQL的网址是:www.hughes.com.au ,最新版本是3.3。MSQL的标志是一个山羊。见图-2。
图-2
安全性方面,mSQL通过ACL文件设定各主机上各用户的访问权限,缺省是 全部可读/写。mSQL缺乏 ANSI SQL 的大多数特征,它仅仅实现了一个最最少的API,没有事务和参考完整性。mSQL与Lite(一种类似C的脚本语言,与分发一起发行)紧密结合,可以得到一个称为 W3-mSQL的一个网站集成包,它是JDBC、ODBC、Perl和PHP API。
3、PostgreSQL
PostgreSQL是属于"对象-关连"式的数据库治理系统 (ORDBMS)。PostgreSQL 的前身叫做 Ingres,是于 1977年至1985年间由着名的柏克莱大学所发展出来的。由于PostgreSQL是用C语言写成的。所以在不同的Unix平台上移植非常方便。PostgreSQL可以在Linux、FreeBSD、SCO Unix、HP Unix、Solaris、AIX等平台上运行。PostgreSQ的网址是http://www.postgresql.org/,最新版本是7.2。 PostgreSQL的官方发音是 :Post-gres-Q-L。 PostgreSQ的标志是一个大象。见图-3
图-3
(1)PostgreSQL的主要优点:
1、对事务的支持与MySQL相比,经历了更为彻底的测试。
2、PostgreSQL支持存储过程,对于一个严厉的商业应用来说,作为数据库本身,有众多的商业逻辑的存在,此时使用存储过程可以在较少地增加数据库服务器的负担的前提下,对这样的商业逻辑进行封装,并可以利用数据库服务器本身的内在机制对存储过程的执行进行优化。此外存储过程的存在也避免了在网络上大量的原始的SQL语句的传输,这样的优势是显而易见的。
3、PostgreSQL支持视图,视图的存在同样可以最大限度地利用数据库服务器内在的优化机制。而且对于视图权限的合理使用,事实上可以提供行级别的权限,这是MySQL的权限系统所无法实现的。
4、PostgreSQL支持触发器,触发器的存在不可避免的会影响数据库运行的效率,但是与此同时,触发器的存在也有利于对商业逻辑的封装,可以减少应用程序中对同一商业逻辑的重复控制。合理地使用触发器也有利于保证数据的完整性。
5、PostgreSQL支持约束。约束的作用更多地表现在对数据完整性的保证上,合理地使用约束,也可以减少编程的工作量。
6、PostgreSQL支持子查询。虽然在很多情况下在SQL语句中使用子查询效率低下,而且绝大多数情况下可以使用带条件的多表连接来替代子查询,但是子查询的存在在很多时候仍然不可避免。而且使用子查询的SQL语句与使用带条件的多表连接相比具有更高的程序可读性。
7、PostgreSQL支持R-trees这样可扩展的索引类型,可以更方便地处理一些非凡数据。 支持ODBC。
8、PostgreSQL可以更方便地使用UDF(用户定义函数)进行扩展。
(2)PostgreSQL的主要缺点:
1、PostgreSQL运行速度明显低于MySQL,因为MySQL使用了线程,而PostgreSQL使用的是进程。在不同线程之间的环境转换和访问公用的存储区域显然要比在不同的进程之间要快得多。
2、PostgreSQL目前仍不完全适应24×7小时运行,这是因为你必须每隔一段时间运行一次VACUUM。
3、PostgreSQL在权限系统上不过完善。PostgreSQL只支持对于每一个用户在一个数据库上或一个数据表上的INSERT、SELECT和UPDATE/DELETE的授权,而MySQL答应你定义一整套的不同的数据级、表级和列级的权限。
4、由于PostgreSQL生成每页的速度要比MySQL慢,所以 不足以用来作高流量网站应用。Postgres没有与MySQL的mysql_insertid()等价的函数调用。假如在MySQL的数据库中插入一行数据,MySQL将返回这行主要害字的ID。
而在Postgres中完成这样一个操作需要绕许多圈子,假如大量应用就会降低效率。
5、PostgreSQL 还欠缺一些比较高端的数据库治理系统需要的特性,比如对大对象的有效支持,以及查询缓冲等提高数据库性能的机制等。
Linux下的数据库系统还有一些,如dbm 是linux下的一种非关系数据库,它实际上是文件形式 的哈希表,每一对名字/值项称为一个记录. dbm有好几个版本,如ndbm,gdbm等。
总结:以上我们主要介绍了Linux环境下的一些主要的数据库,其他自由软件数据库还有 Gadfly 、BeagleSQL、Berkely DB、GNU SQL等。你可以到http://www.linux.org网站查看更多的相关内容。