关系数据库-Firebird


Firebird是一个跨平台的关系数据库系统,目前能够运行在Windows、Linux和各种Unix操作系统上,提供了大部分SQL-99标准的功能。它既能作为多用户环境下的数据库服务器运行,也提供嵌入式数据库的实现。Firebird是一个全功能的、强大高效的、轻量级、免维护的数据库。它很容易让您从单用户,单数据库升级到企业级的应用。 给中小型企业提供了一个很好的工具,一些需要小的数据库的软件。支持多版本并发控制(Multiversion Concurrency Control,MVCC)、Stored Procedure、Trigger、自定义方法(User-defined function,UDF)等商用数据库功能。同时因为与interbase的血缘关系,大部分interbase的GUI工具可以直接应用到Firebird开发中。Firebird是一个跨平台的关系数据库,可运行在 Windows、Linux 和多种 Unix 操作系统上,提供了大部分 SQL-99 标准的功能。它既能作为多用户环境下的数据库服务器运行,也提供嵌入式数据库的实现。源于 Borland 公司的 InterBase 6.0,是一个完全非商业化的产品,源代码经过大规模重写,使用 C++ 开发。
版本区分
Firebird提供三个服务器环境版本,分别是超级服务器版本(SuperServer)、标准服务器版本(ClassicServer)与嵌入式版本(Embedded),使用情况说明:
超级服务器版本(SuperServer)
支持多线程(Multithreading)模式,可以以后台Service模式运行。
标准服务器版本(ClassicServer)
支持每个线程可以自主管理其数据库,允许数据库与服务器不在同一台情况,适合用于多处理器环境。
嵌入式版本(Embedded)
针对嵌入式系统要求独占程序设计版本,允许数据库与服务器在同一台运行情况。

特点
1、含义
一个firebird数据库服务器能够管理多个独立的数据库,每一个数据库同时可支持多个客户端连结。总之:它是一个开源的,可以自由使用的数据库(即使是商业上的使用)。
2、关键特性
支持原子性、并发性、隔离性等概念。
3、MGA
支持事务的多个版本功能。
4、存储过程
使用PSQL(Procedure SQL),你可以创建强大的存储过程来处理服务上的所有数据,你可以使用select Stored Procedure的形式,使用存储过程,以得到一个虚拟的表结构的结果。这样的话,你就可以很容易的在报表中使用它。
5、事件
存储过程和触发器可以引发事件,这个事件可以被客户端程序监听到。
6、生成子
生成子也称为序列,它可以很容易的实现自动增加的字段。它是一个INT64的长度,因此它可以用在一个事务中,也可以用在其它很多方面。
主要特征
1、只读数据库
我们可以把数据库存放在CD中,形成一个只读数据库。如果我们的应用程序也在光盘上,再加上嵌入式的FB数据库服务器,便可以得到一个无与伦比的CDLIVE(即只用光盘就可以运行起来)。
2、全事务控制
一个客户端可以存在多个并发的事务。并且每一个事务都可以独立的进行控制,两段提交功能可以保证数据库的一致性。锁优化机制也支持多个事务的保存点。
3、在线备份
不需要停止数据库即可进行备份,一个备份进程产生一个数据库当前的快照。因此用户可以在备份期间持续的工作,即实现24x7的操作。
4、触发器
每一个表可以有多个并发的行级触发器,可以在插入前、插入后、更新前、更新后、删除前、删除后进行触发。我们可以在触发器中写入PSQL语句,默认值,产生异常,firebird现在支持统一触发器,即可以一个触发器中,一次性管理插入、更新、删除的操作。
5、扩展函数
我们可以使用C语言,C++,DELPHI写UDF,使用UDF(用户定义函数库)可以很容易的挂入数据库引擎中以扩展我们需要的功能。
6、字符集
Firebird实现了很多国际标准的字符集,包括Unicode。
7、SQL标准兼容
Firebird 实现了全部SQL92所要求的功能,实现了SQL99最常用的的要求。包括但不限于"FULL/LEFT/RIGHT [OUTER] JOIN , UNION, DISTINCT , 子查询 (IN, EXISTS),内部函数 (AVG, SUM, MIN, MAX, COALESCE, CASE, ..), 主键,外键,唯一索引以及所有通用的数据类型。
Firebird还实现了域,字段级别的约束、视图、异常、规则和权限管理,更多的详细信息,请参考Firebird发布通知和参考手册。
8、硬件需求
Firebird可以工作最常见的硬件环境中,甚至非常差的硬件中,也能很好的工作,当然硬件的要求依赖于你想做什么,例如,你有朋少个并发用户等等。
9、有效的平台支持
Firebrid在常见的平台上都可运行,如Linux和Windows(包括Windows终端服务器)其它支持的平台包括(MACOS(苹果机), Solaris及HP-UX),把数据库从一个平台转到另一个平台,非常的容易,只要备份数据库,然后再到另一个平台上恢复即可。
10、可连接性
Firebird 支持一系列的连接方法,目前可以通过原生的DELPHI,C++组件连接,也可以通过ODBC,JDBC,PHP,OLEDB,DbExpress进行连接。原生的联连提供了直接调用Firebird的API函数库(fbclient.dll/.so)进行调用的能力。
11、物理限制
Firebird支持非常巨大的数据库,数据库可以分成多个物理文件。每个文件的大小依赖于操作系统的限制。当前一个数据库文件最大的理论限制是64T (即64000G),因此常见的限制通常是操作系统的限制以及磁盘空间的限制。
12、服务器引擎版本
当前有三个服务器版本。
标准服务器:每一个客户连接将引发一个服务器进程(支持多处理器)。
超级服务器:一相服务器进程模块管理所有的客户端连接,当前不支持多处理器。
嵌入服务器:整个服务器引擎就是一个动态库,只支持本地通过IO进行调用。
但是所有的服务器都使用一种数据库格式,因此你可以很方便的在不同的引擎之间共享数据库文件的数据。
13、协议
Firebird协议使用IPL(interbase public license)和IDPL(Initial Developer's Public License),这种协议类似于Mozilla协议。你可以完全的自由使用并且可以自由的布署在你的客户应用上。你不需要公开你的源代码。当然如果你修改和数据库引擎,你应该公布源代码。
14、工具
有很多的工具支持Firebird.包括自由的,免费的和商业的。
包括开发工具,管理工具,诊断工具等等。
15、支持和资源
IPPhonex公司也提供专业的商业支持。在他们网站上,也有很多有用的专业信息及常见问题的解答。
16、团队
Firebird有一系列的用户支持的团队和新闻组,您可以寻求在线支持。您可以查看项目主页上的全部新闻组列表。
版本历史
Firebird 1.0
2002年3月11日发布,初期支持Linux、Windows、Mac OS X版本,两个月后发布Solaris、FreeBSD、HP-UX移植版本,以C语言为中心开发。
Firebird 1.5
2004年2月23日发布,自此版本开始变更为C++为中心开发。SQL陈述句支持SQL92标准函数、SQL1999的SAVEPOINT函数与明确锁定(explicit locking)。
Firebird 2.0
2006年11月12日发布,SQL陈述句支持SQL2003的MERGE函数。更新版本2.1开始支持64位。
Firebird 2.5
2010年10月4日发布。支持正则表达式(Regular Expression,RE)。
Firebird 3.0
2016年04月19日发布。
认识Firebird的Classic,Superserver和embeded server
个人认为的主要特性:
ACID;
MGA(任何版本的引擎都可以处理同一数据库记录);
PSQL(存储过程)超级强大,ms sql相对的太次,它啥都能在服务器端实现并推送到客户端成为强大的报表,存储过程;
触发器都可以在客户端获取监控追踪;
自动只读模式;
创新的事务保证绝对不会出错;
24*7运行中仍然可以随时备份数据库;
统一触发器:任何操作都可以让某表唯一的触发器来总控;
大部分语言都可以写plug-in,并直接在存储过程中调用函数;
c->c++,更加少的代码但更加快的速度;
3种运行模式,甚至可以嵌入式;
主流语言都可以调用它;
动态sql执行;
事务保存点;
Firebird数据库分为Classic Server和Superserver两种体系,有3种模式,单机独立,典型C/S,超级服务器。
这两种体系的区别:
1,进程上:
Classic Server为每个连接都创建一个独立的进程,都有自己独立的内存空间,越少的连接就占用越少的资源。Superserver是所有的连接都在一个进程中,用多线程的提交处理,并且共享内存空间,当有多个并发连接的时候可以有更好的效果。
2,本地连接:
在Windows上,两个体系都支持安全和可靠的本地连接,就只有服务进程需要权限去访问数据库。
3,多处理器:
Classic Server支持多处理器,在有很多连接的时候有更好性能,而且相互之间没有影响,而Superserver不支持,并且如果在多线程的机器上运行,性能可能降低,如果你的机器是多处理器的,那么未了防止这种情况的出现,需要去修改firebird.conf的cpuaffinityMask参数。
4,监视程序:
Classic Server: 当firebird作为应用程序运行的时候,这个监护程序不能运行,注意:只有在Windows 9x-ME下,才能将firebird做为应用程序来运行Superserver: 在firebird作为应用程序或服务的时候都可以运行这个监护程序这两种体系模式,在提供的功能上是没有区别的,都是相同的。
一般下的选择:
在windows选择Superserver,在Linux上两者都可以,因为在大多数情况下,你可能不太会去注意性能上的不同。
嵌入式服务(embedded server)
它是将superserver引型和客户端融合到一个库(fbembed.dll)中,对它的安装是将一些DLL和其他文件放制到任意的目录中,这种模式下数据库的安全性降低了,因为任何人都可以连接到数据库,并且只要拥有文件权限的用户都有权限访问数据库。
在同一时间,你可以有多个嵌入式服务一起运行,并且还可以有多个应用程序连接到同一个服务。可是有个情况,当一个嵌入式服务成功连接数据库后,它会一直独占。也就是其他的嵌入式服务不能对这个数据库进行访问。它只支持本地的连接,而且在连接字符串中都不能包含hostname(例如:localhost),这种模式下就根本不是客户-服务器这种类型的数据库,只是一个桌面形式的数据库。
嵌入式服务的部署
先从SourceForge上把它下载下来,下载完后,进行解压缩,可以发现在根目录下有个fbembed.dll的文件,还有其他文件。
让应用程序在这个服务上工作
1,拷贝fbembed.dll到你的应用程序目录,拷贝完后你可以对这个DLL重新命名(你喜欢的名字)。firebird的命令行工具isq和gbak,也可以在embedded server上运行。
2,还需要将firebird.msg和ib_util.dll这两个文件拷贝到应用程序目录,如果你的应用程序要通过aliases去连接的话,你就必须拷贝aliases.conf,还有如果你希望去修改firebird配置的话,就去拷贝firebird.conf。
3,当是Firebird 2.0或者更高的版本,还需要拷贝icu*.dll库。
4,在应用程序目录中,必须要有intl和udf这两个文件夹。
5,配置完上面后就可以用embedded server DLL去连接本地的firebird数据库了。只要当前用户有文件访问权限就可以了,数据库连接根本不需要去设置任何的用户名和密码。
Firebird的有些文件也可以放在其他地方,例如firebird.msg,aliases.conf,intl和udf目录中内容,这些可以放在其他地方,但是如果放在其他地方需要对firebird.conf中RootDirectory的参数进行修改。
这种方式的最大好处就是易与部署和安装,而且你可以同时拥有多个版本的embedded server在同一台机器上运行。安全资料档案security.fdb没有被使用,不需要它,但是SQL执行权限任会被检查。
sqlite和firebird关于损坏问题:
1、突然停电或系统突然重启动导至数据损坏。sqlite对这方面很大程度上避免这个问题方面做得比较好。
2、加密功能,不用担心数据被别人复制到别的地方打开。而firebird只要能复制到别的地方,随便可以打开。
3、频烦的插入删除,更新数据,不会导至数据数据库很快增长。firebird数据库快速度增长是容易导至数据库损坏的原因。
这三个问题,是导至一个软件是否长期使用时的可靠性问题。使用了各种办法想让sqlite数据库出现损坏(在操作数据库时用突然断电,强制杀死进程,重新启动等等),都没有办到。而firebird这样折腾一会数据库文件准坏,且很有可能无法修复。
最新版本:
Firebird版本发行录(202x)
官方主页:http://www.firebirdsql.org/
中文社区:http://www.firebird.net.cn/main.asp
版本区分
Firebird提供三个服务器环境版本,分别是超级服务器版本(SuperServer)、标准服务器版本(ClassicServer)与嵌入式版本(Embedded),使用情况说明:
超级服务器版本(SuperServer)
支持多线程(Multithreading)模式,可以以后台Service模式运行。
标准服务器版本(ClassicServer)
支持每个线程可以自主管理其数据库,允许数据库与服务器不在同一台情况,适合用于多处理器环境。
嵌入式版本(Embedded)
针对嵌入式系统要求独占程序设计版本,允许数据库与服务器在同一台运行情况。

特点
1、含义
一个firebird数据库服务器能够管理多个独立的数据库,每一个数据库同时可支持多个客户端连结。总之:它是一个开源的,可以自由使用的数据库(即使是商业上的使用)。
2、关键特性
支持原子性、并发性、隔离性等概念。
3、MGA
支持事务的多个版本功能。
4、存储过程
使用PSQL(Procedure SQL),你可以创建强大的存储过程来处理服务上的所有数据,你可以使用select Stored Procedure的形式,使用存储过程,以得到一个虚拟的表结构的结果。这样的话,你就可以很容易的在报表中使用它。
5、事件
存储过程和触发器可以引发事件,这个事件可以被客户端程序监听到。
6、生成子
生成子也称为序列,它可以很容易的实现自动增加的字段。它是一个INT64的长度,因此它可以用在一个事务中,也可以用在其它很多方面。
主要特征
1、只读数据库
我们可以把数据库存放在CD中,形成一个只读数据库。如果我们的应用程序也在光盘上,再加上嵌入式的FB数据库服务器,便可以得到一个无与伦比的CDLIVE(即只用光盘就可以运行起来)。
2、全事务控制
一个客户端可以存在多个并发的事务。并且每一个事务都可以独立的进行控制,两段提交功能可以保证数据库的一致性。锁优化机制也支持多个事务的保存点。
3、在线备份
不需要停止数据库即可进行备份,一个备份进程产生一个数据库当前的快照。因此用户可以在备份期间持续的工作,即实现24x7的操作。
4、触发器
每一个表可以有多个并发的行级触发器,可以在插入前、插入后、更新前、更新后、删除前、删除后进行触发。我们可以在触发器中写入PSQL语句,默认值,产生异常,firebird现在支持统一触发器,即可以一个触发器中,一次性管理插入、更新、删除的操作。
5、扩展函数
我们可以使用C语言,C++,DELPHI写UDF,使用UDF(用户定义函数库)可以很容易的挂入数据库引擎中以扩展我们需要的功能。
6、字符集
Firebird实现了很多国际标准的字符集,包括Unicode。
7、SQL标准兼容
Firebird 实现了全部SQL92所要求的功能,实现了SQL99最常用的的要求。包括但不限于"FULL/LEFT/RIGHT [OUTER] JOIN , UNION, DISTINCT , 子查询 (IN, EXISTS),内部函数 (AVG, SUM, MIN, MAX, COALESCE, CASE, ..), 主键,外键,唯一索引以及所有通用的数据类型。
Firebird还实现了域,字段级别的约束、视图、异常、规则和权限管理,更多的详细信息,请参考Firebird发布通知和参考手册。
8、硬件需求
Firebird可以工作最常见的硬件环境中,甚至非常差的硬件中,也能很好的工作,当然硬件的要求依赖于你想做什么,例如,你有朋少个并发用户等等。
9、有效的平台支持
Firebrid在常见的平台上都可运行,如Linux和Windows(包括Windows终端服务器)其它支持的平台包括(MACOS(苹果机), Solaris及HP-UX),把数据库从一个平台转到另一个平台,非常的容易,只要备份数据库,然后再到另一个平台上恢复即可。
10、可连接性
Firebird 支持一系列的连接方法,目前可以通过原生的DELPHI,C++组件连接,也可以通过ODBC,JDBC,PHP,OLEDB,DbExpress进行连接。原生的联连提供了直接调用Firebird的API函数库(fbclient.dll/.so)进行调用的能力。
11、物理限制
Firebird支持非常巨大的数据库,数据库可以分成多个物理文件。每个文件的大小依赖于操作系统的限制。当前一个数据库文件最大的理论限制是64T (即64000G),因此常见的限制通常是操作系统的限制以及磁盘空间的限制。
12、服务器引擎版本
当前有三个服务器版本。
标准服务器:每一个客户连接将引发一个服务器进程(支持多处理器)。
超级服务器:一相服务器进程模块管理所有的客户端连接,当前不支持多处理器。
嵌入服务器:整个服务器引擎就是一个动态库,只支持本地通过IO进行调用。
但是所有的服务器都使用一种数据库格式,因此你可以很方便的在不同的引擎之间共享数据库文件的数据。
13、协议
Firebird协议使用IPL(interbase public license)和IDPL(Initial Developer's Public License),这种协议类似于Mozilla协议。你可以完全的自由使用并且可以自由的布署在你的客户应用上。你不需要公开你的源代码。当然如果你修改和数据库引擎,你应该公布源代码。
14、工具
有很多的工具支持Firebird.包括自由的,免费的和商业的。
包括开发工具,管理工具,诊断工具等等。
15、支持和资源
IPPhonex公司也提供专业的商业支持。在他们网站上,也有很多有用的专业信息及常见问题的解答。
16、团队
Firebird有一系列的用户支持的团队和新闻组,您可以寻求在线支持。您可以查看项目主页上的全部新闻组列表。
版本历史
Firebird 1.0
2002年3月11日发布,初期支持Linux、Windows、Mac OS X版本,两个月后发布Solaris、FreeBSD、HP-UX移植版本,以C语言为中心开发。
Firebird 1.5
2004年2月23日发布,自此版本开始变更为C++为中心开发。SQL陈述句支持SQL92标准函数、SQL1999的SAVEPOINT函数与明确锁定(explicit locking)。
Firebird 2.0
2006年11月12日发布,SQL陈述句支持SQL2003的MERGE函数。更新版本2.1开始支持64位。
Firebird 2.5
2010年10月4日发布。支持正则表达式(Regular Expression,RE)。
Firebird 3.0
2016年04月19日发布。
认识Firebird的Classic,Superserver和embeded server
个人认为的主要特性:
ACID;
MGA(任何版本的引擎都可以处理同一数据库记录);
PSQL(存储过程)超级强大,ms sql相对的太次,它啥都能在服务器端实现并推送到客户端成为强大的报表,存储过程;
触发器都可以在客户端获取监控追踪;
自动只读模式;
创新的事务保证绝对不会出错;
24*7运行中仍然可以随时备份数据库;
统一触发器:任何操作都可以让某表唯一的触发器来总控;
大部分语言都可以写plug-in,并直接在存储过程中调用函数;
c->c++,更加少的代码但更加快的速度;
3种运行模式,甚至可以嵌入式;
主流语言都可以调用它;
动态sql执行;
事务保存点;
Firebird数据库分为Classic Server和Superserver两种体系,有3种模式,单机独立,典型C/S,超级服务器。
这两种体系的区别:
1,进程上:
Classic Server为每个连接都创建一个独立的进程,都有自己独立的内存空间,越少的连接就占用越少的资源。Superserver是所有的连接都在一个进程中,用多线程的提交处理,并且共享内存空间,当有多个并发连接的时候可以有更好的效果。
2,本地连接:
在Windows上,两个体系都支持安全和可靠的本地连接,就只有服务进程需要权限去访问数据库。
3,多处理器:
Classic Server支持多处理器,在有很多连接的时候有更好性能,而且相互之间没有影响,而Superserver不支持,并且如果在多线程的机器上运行,性能可能降低,如果你的机器是多处理器的,那么未了防止这种情况的出现,需要去修改firebird.conf的cpuaffinityMask参数。
4,监视程序:
Classic Server: 当firebird作为应用程序运行的时候,这个监护程序不能运行,注意:只有在Windows 9x-ME下,才能将firebird做为应用程序来运行Superserver: 在firebird作为应用程序或服务的时候都可以运行这个监护程序这两种体系模式,在提供的功能上是没有区别的,都是相同的。
一般下的选择:
在windows选择Superserver,在Linux上两者都可以,因为在大多数情况下,你可能不太会去注意性能上的不同。
嵌入式服务(embedded server)
它是将superserver引型和客户端融合到一个库(fbembed.dll)中,对它的安装是将一些DLL和其他文件放制到任意的目录中,这种模式下数据库的安全性降低了,因为任何人都可以连接到数据库,并且只要拥有文件权限的用户都有权限访问数据库。
在同一时间,你可以有多个嵌入式服务一起运行,并且还可以有多个应用程序连接到同一个服务。可是有个情况,当一个嵌入式服务成功连接数据库后,它会一直独占。也就是其他的嵌入式服务不能对这个数据库进行访问。它只支持本地的连接,而且在连接字符串中都不能包含hostname(例如:localhost),这种模式下就根本不是客户-服务器这种类型的数据库,只是一个桌面形式的数据库。
嵌入式服务的部署
先从SourceForge上把它下载下来,下载完后,进行解压缩,可以发现在根目录下有个fbembed.dll的文件,还有其他文件。
让应用程序在这个服务上工作
1,拷贝fbembed.dll到你的应用程序目录,拷贝完后你可以对这个DLL重新命名(你喜欢的名字)。firebird的命令行工具isq和gbak,也可以在embedded server上运行。
2,还需要将firebird.msg和ib_util.dll这两个文件拷贝到应用程序目录,如果你的应用程序要通过aliases去连接的话,你就必须拷贝aliases.conf,还有如果你希望去修改firebird配置的话,就去拷贝firebird.conf。
3,当是Firebird 2.0或者更高的版本,还需要拷贝icu*.dll库。
4,在应用程序目录中,必须要有intl和udf这两个文件夹。
5,配置完上面后就可以用embedded server DLL去连接本地的firebird数据库了。只要当前用户有文件访问权限就可以了,数据库连接根本不需要去设置任何的用户名和密码。
Firebird的有些文件也可以放在其他地方,例如firebird.msg,aliases.conf,intl和udf目录中内容,这些可以放在其他地方,但是如果放在其他地方需要对firebird.conf中RootDirectory的参数进行修改。
这种方式的最大好处就是易与部署和安装,而且你可以同时拥有多个版本的embedded server在同一台机器上运行。安全资料档案security.fdb没有被使用,不需要它,但是SQL执行权限任会被检查。
sqlite和firebird关于损坏问题:
1、突然停电或系统突然重启动导至数据损坏。sqlite对这方面很大程度上避免这个问题方面做得比较好。
2、加密功能,不用担心数据被别人复制到别的地方打开。而firebird只要能复制到别的地方,随便可以打开。
3、频烦的插入删除,更新数据,不会导至数据数据库很快增长。firebird数据库快速度增长是容易导至数据库损坏的原因。
这三个问题,是导至一个软件是否长期使用时的可靠性问题。使用了各种办法想让sqlite数据库出现损坏(在操作数据库时用突然断电,强制杀死进程,重新启动等等),都没有办到。而firebird这样折腾一会数据库文件准坏,且很有可能无法修复。
最新版本:
Firebird版本发行录(202x)
官方主页:http://www.firebirdsql.org/
中文社区:http://www.firebird.net.cn/main.asp