[转载]Firebird与MySQL:一个使用者的体会

老板要我开发一个LINUX平台上的数据库项目,要求一定要用开源免费数据库。我知道这个数据库必须能够上网操作,同时作为公司的核心骨干数据库,除了必须是稳定的存储数据库外还必须有很强的数据和数据库控管功能。

我想了想说,就用MYSQL吧。老板问为什么。 我把所知的好处倒背如流地数说一遍,并强调据MySQL执行副总裁Zack Urlocker讲,MySQ在中国的下载量已经超过了美国,中国市场现在是第一大下载量。去年截至九月份的数字是380万的下载量。。。MYSQL一定是最好的。

老板面有迟疑,说他太不明白我的意思。他想要知道的是什么数据库最适用我们公司,我却告诉他MySQ在中国的下载量世界第一,因此MYSQL一定是最好的。他说中国的自行车产量用量都是世界第一,但不能因此就说中国的自行车质量性能也一定是世界第一,更重要的是不能因此就说中国的自行车一定适用我们公司,看不出两者间的必然联系。

我说下载的人多,用的人也就多,前有古人,后有来者,道路平坦,不需摸索。MYSQL书籍比比皆是,各种案例垂手可得,路熟驾轻,好写好用。随大流,准没错。

老板一笑,说恐怕这才是真正原因之一。接着说, 听说中国有个叫鲁迅的说过,其实世上本是没有路的,走的人多了,也便渐渐地成了路。就是MYSQL最初也一定有拓路者,摸索者,开例者,著书者,现在才能有“前有古人,后有来者,道路平坦,不需摸索”。

我略吃一惊,没想到这个喝过点洋汤的假洋鬼子还知道中国有个叫鲁迅的(老实说,我都不太知道,鲁迅的书没读过几本)。接着老板又交给我一份表格,要我回答驳倒所例问题,并顺便问一下, 这380万的下载量中有多少是经过认真比较堪察之后决定用MYSQL的。

我接过一看,又是一惊,其中许多问题还是第一次看到。因此决定拿到这里。高手云集,冠盖繁星(各位中老总,少总不少吧),请直陈理由,无论如何要把假洋鬼子顶倒。

老板推荐的是 FIREBIRD FOR LINUX 。

所有比较和数据均以已在运行中的正式发行版为依据。

多处引用 “专访MySQL副总:MySQL的空间在哪里?” 日期:2007-05-29 作者:IT168 来自:linux.chinaunix.net

据MySQL执行副总裁Zack Urlocker讲:

在安装成本上,MySQL是根据服务器来收费的,即一个服务器收取多少钱。MySQL旧版升级必须付费. 像*、企业、电信用户,他们可以向万里开源公司来买商业许可证。

据悉,MySQL 3.23和4.0版本的用户如果要继续获得安全更新服务,则必须购买“MySQL网络支持”服务。该服务的启动时间为:3.23版从八月一日开始,4.0 版则从十月一日开始。 网络支持的收费为:美国服务期每年595美元;欧洲服务期每年495欧元。(也许对中国情况很了解,干脆不收费了?)。

近日,MySQL低调宣布它将不再把MySQL企业版服务器作为一个tar包发布,而这距离这个公司宣布将MySQL分为免费版和付费版的时间还不到一年。尽管它的企业版服务器代码依然在通用公共许可下推出,MySQL正在使不是它的客户的人们更加难于访问这个源代码。 MySQL公司负责社区关系的副总裁Kaj Arno写到,企业版的tar包“将从ftp.mysql.com中删除,而增加到enterprise.mysql.com中,将只对我们的付费申请者提供。”令许多用户感到担心的事情之一是,以后的社区版是否会一个功能低劣的版本  (新闻来源:IT168 发布日期:2007-08-15)

FIREBIRD 彻底免费. 源代码彻底公开。

http://sourceforge.net/projects/firebird;

http://www.ibphoenix.com;

http://www.firebirdsql.org

MySQL也可以提供一些企业级的技术服务,我们经常提到的它的三个服务就是它的性能、可靠性、易用性。

易用性。我们这里依赖几个数字,MySQL的安装包非常的小,大概是15兆到20兆。作为一个数据库,这么小的安装程序这是其他软件做不到的。另外, MySQL的安装非常简单,只需要15分钟。有的客户不相信,我们的工程师就现场教给他,15分钟就可以安装完,这是你不可想象的。

FIREBIRD的安装包只有 6M, 安装简单,只需要 3-5 分钟。(一个RPM命令)

在安装之后, MySQL必须决定应用于何种类型

第一种是开发服务器,将只用尽量少的内存,

第二种是普通WEB服务器,将使用中等数量内存,

最后一种是这台服务器上面只跑mysql数据库,将占用全部的内存.

象我们公司这样, 这个数据库必须能够上网操作,必须合用服务器(这台服务器上面除mysql数据库外, 还有其他程式, mysql不能单独占用服务器),怎么办?

FIREBIRD 安装之后只有一种默认类型, 占用 32-64 MB 内存。 完全不需单独占用服务器。

然后MySQL必须决定选择数据库用途,

第一种是多功能用途,将把数据库优化成很好的innodb存储类型和高效率的myisam存储类型,(最多选用).在MySQL的用户中,比如说在新浪或者雅虎,MySQL是作为存储性的数据库,而不是作为事务处理和管理性的数据库, MySQL都是应用在非管理性业务中。

第二种是只用于事务处理类型,最好的优化innodb,但同时也支持myisam。

最后一种是非事务处理类型,适合于简单的应用,只有不支持事务的myisam类型是被支持的。

象我们公司这样, 这个数据库必须能够上网操作,同时作为公司的核心骨干数据库,除了必须是稳定的存储数据库外还必须有很强的数据和数据库控管功能。怎么办? 选哪种好?

FIREBIRD高效率的存储功能是其默认的基本功能之一, 而数据和数据库控管功能则是其强项之一。

因为MySQL的存储引擎是可以更换的这个优势,所以MySQL有很多的存储引擎,当然各种存储引擎有各自的特点,客户因为用了MySQL有这种灵活地选择存储引擎的优势,所以可以选择不同的存储引擎来适合自己的应用。

优势呼, 劣势呼!麻烦大了。不错,MYSQL是有4种引擎,但每种引擎都有各自不同(不通)的数据库表结构,不同的磁盘文件结构,不同的数据和数据库控管要求。严格地讲,按RDBMS标准MYSQL不是一个,而是4个数据库。比如DBD(Berkeley)数据库引擎会在表头内写下该表的完整路径,因此不能把含有该表的数据库挪到另外目录中去操作。这样在硬件升级或系统故障而必须把含有该表的数据库挪到另外目录中去时,只好先甩出数据,在新地点新建数据库,再塞回数据。稍有闪失,数据出错。如果是一大型数据库,不堪设想。实际上是, 多种引擎, 一个工作,一旦选定,极难转换。

MYSQL最为得意的是高效快捷的SELECT回选功能,这也是MYSQL优先标榜的高端性能之一。这一功能是在MYISAM引擎上提供的,其他3个都不行。同时MYISAM也是唯一一个提供表内全文索引的引擎。但这是在实验室内最理想条件下达到的。MYISAM引擎在进行SELECT时要给INSERT,UPDATE,DELETE优先权。同时必须全表加锁。而在进行INSERT,UPDATE,DELETE时,任何其他用户不能对该表内任何一行进行读写。就是说在这一刻只能有一个用户对该表进行操作,从而得到高效快捷的SELECT回选功能。试问,对一个多用户上网操作的数据库来说,这不是实验室内最理想条件又是什么。在现实中可要了命了。 这可能也是为什么大户的MySQL都是作为存储性的数据库,而不是作为事务处理和管理性的数据库,MySQL都是应用在非管理性业务中。

今天的数据库大都要求又读又写。(至少我们公司要求这样)。如果MYSQL工作在一多用户的频繁,交叉,众多的INSERT,UPDATE,DELETE数据库环境下,发出SELECT的用户可能会感觉到“泥牛入海无消息”。因为MYISAM引擎在进行SELECT前要给何改变表的SQL指令,特别是UPDATE指令,以绝对优先权。如果一个UPDATE指令要刷新很多行或半个表,那发出SELECT的用户就在那慢慢熬吧。

DBD(Berkeley)数据库引擎好了点,是全叶加锁。UPDATE一行只锁一叶。但却没有了MYSQL最为得意的高效快捷的SELECT回选功能。而且如上所述,不能把含有该表的数据库挪到另外目录中去操作。

MYSQL数据库引擎中功能最好的就是以前一直使用的,现被Oracle收购了的InnoDB。但同样没有了MYSQL最为得意的高效快捷的SELECT回选功能。

FIREBIRD数据库只有两个引擎, 一个是FIREBIRD CLASSIC, 一个是FIREBIRDSS (FIREBIRD SUPPERSERVER)。两种引擎所发出的指令,进行的操作,所得结果,创建的数据库,表等完全一模一样,数据库可(在LINUX权限内)任意移动,操作。两引擎创建的数据库,表等可互换操作。不同平台上产生的数据库可互换操作。

FIREBIRD两个引擎不同的是:FIREBIRD CLASSIC对每一联结开通一个进程(Process), 而FIREBIRDSS则开通一个线程(thread)。 由于FIREBIRD CLASSIC支持多核主机(multiple CPU's)并可自动为每一个联结开通一个进程, 因此特别适合网上不须互动输入,多个网点连续不断的无人值守自动信息采集和数据输入。另外,FIREBIRD CLASSIC还适用于要求高效但系统资源有限的地方。如嵌入系统。事实上其早就被广泛地应用在嵌入系统中,特别是可移动嵌入系统中。(听说已形成了几个常规系列,因此有意保持低调 ?)除上述原因,用途外,应全部使用FIREBIRDSS。(FIREBIRDSS的多核支持工作正在进行中)。

FIREBIRD采用多代体版本模式结构(Multi-Generational-Architecture-Versioning-Model), 这是目前最先进的多用户并发解决方案中的首选方案。其鼻祖正是Jim Starkey. 就连软件之林的呼啸者在抵制数年后,最终也羞羞嗒嗒地说了一句,嘿,俺也用上了MGA呢。由于FIREBIRD采用多代体版本模式结构,上述MYSQL的各种问题在FIREBIRD中都不会发生,也不明白为什么会发生, 更不明白为什么还要用。FIREBIRD一个引擎可同时运行,控管多个数据库,跨越多个数据库进行事物操作,其特别适用于需要海量数据的决策系统。(这是MYSQL望尘莫及的)例如有些大户*采用两台MYSQL数据库主机,一台MYSQL进行数据和数据库控管, 另一台MYSQL只管查询。(还记得上述SELECT问题吧)。这在FIREBIRD中都不会发生,也不允许会发生。(我们公司不允许如此配置,单是两台数据库主机的数据同步,维护就麻烦大了,更别说灾难恢复)。

现在看看MYSQL数据库引擎中功能最好的InnoDB引擎。首先看看最基本的。

InnoDB不支持DOMAIN数据类型。整个MYSQL中也没有DOAMIN这一说。什么是DOMAIN(域)呢?比如说一个表中有3个栏目(字段)是相同的数据类型,在MYSQL中就要重复定义3次。如果一个数据库中有300个栏目(字段)是相同的数据类型,在MYSQL中就要重复定义300次。如果要更改的话,就要一个一个地再重新重复定义300次。忘记几个栏目(字段)是常有的。

在FIREBIRD中只要定义1次。这就是DOMAIN(域)。然后就可以在整个数据库中无数次使用。遇到相同数据类型的栏目(字段),只要把这DOAMIN的名字填上就可以。如果要更改的话只要改一个DOAMIN的定义就可以了,300个栏目(字段)就全改过来。你看哪个更容易维护, 更不容易出错。

InnoDB不支持ROLE(角色)。这样授权时要一个一个用户(user)授权。修改时要一个一个用户(user)改。

FIREBIRD支持ROLE。可以把所有权限相同的用户名集中在一个ROLE名下,一次授权,全体获益。修改时,收权时也一样。一个用户可还以同时归集在几个ROLE名下,享有不同的权限。(如在数个表中)。你看哪个更容易维护, 更不容易出错。

MYSQL(InnoDB)不支持ARRAY( 数组)数据类型。这一在小学,中学算数中都有的数据类型MYSQL竟然不支持。就是说不能在MYSQL表中创建含有ARRAY( 数组)数据类型的栏目(字段)。

FIREBIRD不仅支持ARRAY(数组)数据类型, 而且支持多维ARRAY(数组)数据类型。就是说可以在FIREBIRD表中创建含有ARRAY(数组)数据类型的栏目(字段)。

MYSQL(InnoDB)中有些数据类型既不是SQL──99标准,也不是SQL200X标准,甚至不是ANSI标准。

FIREBIRD中的所有数据类型则是紧跟着上述标准走。你看哪个更容易维护, 更不容易出错。

MYSQL(InnoDB)不支持CHECK约束(复查约束)。必须把复查条件写死在用户程式中。

FIREBIRD支持CHECK约束(复查约束),可以把复查条件写在数据库中,加在DOAMIN里,加在字段中, 哪用哪调。你看哪个更容易维护, 更不容易出错。

再来看看MYSQL(InnoDB)中高端点的功能。(实在是不敢恭维,别太难为了)

在所有MYSQL引擎中只有InnoDB可以进行真正的在线备份。(online backup). 但MYSQL本身并没有这一功能,也不支持这一功能。想要对InnoDB数据库进行在线备份,必须购买Innobase 公司的 InnoDB Hot Backup, 一年许可证520美元, 或可延续许可证1320美元。MYSQL自带的 mysqlhotcopy 工作时必须锁表,而且只能对 MyISAM 和 ARCHIVE 表备份。(MyISAM and ARCHIVE tables)。 mysqldump 工作时必须锁读,否则如果数据库表在备份过程中被修改,进入备份的表文件有不一致的状态,那么以后的恢复将毫无意义。因此都不是真正的在线备份。

FIREBIRD可以进行真正的在线备份。(online backup).就是说在备份时所有联在数据库上的用户都可以如常操作,毫无感觉,毫无影响。只不过从开始备份的那一瞬间起,其后对原数据库所做的任何操作,变化等都不会写入到备份数据库中。但这些操作,变化都会如常写入到原数据库中。FIREBIRD还有 nbackup, 既是只对变化了的部分(mutation)进行备份,又称为“增量备份”。其增量的时间差可以精确到分以下 (minute). FIREBIRD备份是对整个数据库进行备份,而不是象 mysqldump 那样只对create 和 insert 有效。 FIREBIRD备份时可将一个原数据库分拆成多个较小的备份数据库文件,每个备份数据库文件的大小可由用户指定,每个备份数据库可(在LINUX权限内)任意地点存放,包括可移动存储设备。恢复时既可以恢复成一个数据库,也可恢复成多个数据库。(当然不是同一个数据库的多个复制品,那有什么意思)例如原数据库是40M,备份成3个较小的备份数据库文件, f1.fbk=10M, f2.fbk=12M, f3.fbk=18M, 分别存放在LINUX权限所及之任意地点。恢复时既可以恢复成一个与原数据库一样的数据库,40M,也可把一个数据库拆成3段,指定不同大小, 指定不同地点。然后如常操作,毫无感觉,毫无影响。这样才有更强的抗灾能力,更强的安全能力。(想想为什么)。

MYSQL没有原核事务运作机制 (atomic transaction)。就是说MYSQL不能对数条语句进行事物控制,如果其中一条失败后,也不能对整个事务进行回退!

有无原核事务运作机制 (atomic transaction)是(我们公司)区别一个数据库档次的重要标准之一。如果仅仅作为存储性的数据库,而不是作为事务处理和管理性的数据库,那到是可有可无。 如 xBase,nonBase 等都没有原核事务运作机制,作为存储性的数据库都没问题。但若是应用在事务处理和管理性业务中。那只能是“刘姥姥溜边大观园 --- 未入流“。

FIREBIRD有着完整,强悍且严格的原核事务运作机制 (atomic transaction)。可自动两阶段提交和分布式两阶段提交/恢复,因此可以同时运行,控管多个数据库,跨越多个数据库进行事物操作,使数据和数据库控管功能成其强项之一!

MYSQL没有专门的灾难恢复机制, 所有所用所依赖的就是上述的备份功能再加上更新日志。在使用前还必须确保删去更新日志中会导致数据丢失的语句。灾难恢复所需时间取决于备份恢复时间和事物日志加更新日志的大小。

FIREBIRD有着完整的专门的灾难恢复机制。除上述的备份功能可作灾难恢复之外,FIREBIRD还有专门为灾难恢复而设的 ”影像文件“(shadow file). 故名思义,”影像文件“ 就是亦步亦趋,如影相随。FIREBIRD在建立数据库时可以同时建立(多份)影像文件(只要给个文件名就可以,当然不会疏忽到把影像文件建在与数据库同一个磁盘或主机中)。然后就不必管了。数据库如常操作,影像文件后台运行。照葫芦画瓢,亦步亦趋,点滴不漏,把运行中的数据库完完整整地复制下来。数据库崩溃或硬件故障时,一个指令,激活影像文件。于是影像文件升级作 ”老大“,取代原数据库作为主数据库正常运行。这时可以再(自动)为这个”老大“作影像文件。。。数十秒内即可完成灾难恢复。另外若仅仅因断电或系统崩溃而导致数据库灾难,FIREBIRD的自动系统崩溃恢复机制可自动进入无人值守数据库恢复程序,用户要作的就是保证恢复电源和系统运行。危厄现,安然定,神鸟应无恙。

最后看看两个数据库的摹制(database replication)能力。

MYSQL仅支持单向非同步数据库摹制。(asynchronous on-way database replication) 必须把一个数据库设定成主数据库A,另一个为从属数据库B。数据只能从主数据库A向从属数据库B摹制。如果还需从属数据库B向主数据库A摹制(如分部向总部传递)那必须再把从属数据库B设定为A, 主数据库变成B。或再增添两个数据库主机专事摹制。若是多层多点多向摹制,不堪设想。(这也是我们公司不允许双机配置的原因之一,我们公司肯定要进行多层多点多向跨层摹制)。

FIREBIRD既支持多向非同步数据库摹制。(Asynchronous N-way database replication),也支持多向同步数据库摹制。(Synchronous N-way database replication),用户可从任何一个FIREBIRD引擎向另外一个FIREBIRD引擎摹制,反之亦然。可供选择的FIREBIRD摹制引擎也非常之多。下面略举一些:

IBReplicator - (首选, 请支持FIREBIRD社团核心,吃的是草,挤出的是血)

http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_ replicator

FiBRE - open source, cross-platform

http://fibre.sourceforge. net/

FBReplicator - open source

http://www.meta.com.au

ReplicadorBR - open source

http://sourceforge.net/projects/replicadorbr/

另外上面介绍的nbackup, 只对变化了的部分(mutation)进行备份,又称为“增量备份”。其增量的时间差可以精确到分以下 (minute).若把nbackup与网络或专用线结合起来,也不知会是什么结果啊。

LAFP(Linux Apache Firebird PHP)架构已久经沙场,运行稳定。现在最新的 RHEL5, CentOS5, Ubuntu (http://www.firebirdsql.org/manual/ubusetup.html) 上试运行,并要在多墙多层多穴(Multi-Firewall-Host,Multi-Layer,Multi-Inc)结构上试运行。简称3M结构 (MMM结构)或 MMMFS结构。但是不是到此为止了呢。

据报,日本产通省大臣 (Japanese communications minister Yoshihide Suga)星期五在巴西宣布,日本将研发新一代的网络以取代现行的万因网 (internet),

预计在2020年投入使用。

MySQL执行副总裁Zack Urlocker讲:Oracle的主席曾经说过一句话,说Oracle是播音747,而MySQL是丰田汽车。他完全同意这个观点。

如果这样,我看FIREBIRD是 AIR-BUS。当然,丰田车与AIR-BUS各有各的用途,各有各的长处。对丰田车的驾驶员与AIR-BUS的驾驶员要求也不同,两者创造的价值和所得也不同。我们公司设有专门的软件部,请有很好的系统工程师和软件工程师。有些可称同行中的姣姣者。但你老对我说,所有可以创新的地方早已被人捷足先登,已然无所可为,能够跟上就不错了。也许因我是外行,至多也就是个半路出家。所以不管向哪个方向望去,总是看到一片又一片未曾开垦过的土地,散发着原野的芬芳,感受着鼙鼓阵阵马啸啸。

上一篇:linux---shell流程控制


下一篇:浅论Javascript在汽车信号测试中的应用