关于SQLite 与 FireBird 利弊分析

经查阅网上资料: 

一、关于数据库简介: 
SQLite    主页:http://www.sqlite.org 
SQLite诞生于2000年5月,这几年增长势头迅猛无比,目前版本是3.3.8。 

SQLite的特点如下: 

1、无需安装配置,应用程序只需携带一个动态链接库。 

2、非常小巧,For Windows 3.3.8版本的DLL文件才374KB。 

3、ACID事务支持,ACID即原子性、一致性、隔离性、和持久性(Atomic、Consistent、Isolated、和 Durable)。 

4、数据库文件可以在不同字节顺序的机器间自由的共享,比如可以直接从Windows移植到Linux或MAC。 

5、支持数据库大小至2TB。 

6、sqlite无疑是最小的一个,单文件程序,只有400k,而它生成的数据库文件也是单文件。它支持大部份SQL92标准,不过遗憾的是不支持外键与存储过程 

Firebird 嵌入服务器版(Embedded Server)   主页:http://www.firebirdsql.org 
从Interbase开源衍生出的Firebird,充满了勃勃生机。虽然它的体积比前辈Interbase缩小了几十倍,但功能并无阉割。为了体现Firebird短小精悍的特色,开发小组在增加了超级服务器版本之后,又增加了嵌入版本,最新版本为2.0。 

Firebird的嵌入版有如下特色: 

1、数据库文件与Firebird网络版本完全兼容,差别仅在于连接方式不同,可以实现零成本迁移。 
2、数据库文件仅受操作系统的限制,且支持将一个数据库分割成不同文件,突破了操作系统最大文件的限制,提高了IO吞吐量。 
3、完全支持SQL92标准,支持大部分SQL-99标准功能。 
4、丰富的开发工具支持,绝大部分基于Interbase的组件,可以直接使用于Firebird。 
5、支持事务、存储过程、触发器等关系数据库的所有特性。 
6、可自己编写扩展函数(UDF)。 
7、firebird其实并不是纯粹的嵌入式数据库,embed版只是其众多版本中的一个。不过做的也很小,把几个dll加起来才不到5M,但是它支持绝大部份SQL92与SQL99标准 

二、sqlite和FB比,关于损坏问题: 
1:突然停电或系统突然重启动导至数据损坏。sqlite对这方面很大程度上避免这个问题方面做得比较好。 
2:加密功能,不用担心数据被别人复制到别的地方打开。而FB只要能复制到别的地方,随便可以打开。 
3:频烦的插入删除,更新数据,不会导至数据数据库很快增长。FB数据库快速度增长是容易导至数据库损坏的原因。 

这三个问题,是导至一个软件是否长期使用时的可靠性问题。 
我使用了各种办法想让sqlite数据库出现损坏(在操作数据库时用突然断电,强制杀死进程,重新启动等等),都没有办到。而FB这样折腾一会数据库文件准坏,且无法修复。 

三、sqlite和FB比,关于性能问题: 

http://www.jbxue.com/db/6334.html


SQLLite操作百万级数据之优化篇

描述:SQLite数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很耗时的过程,会极大地影响数据库存取的速度。


描述:
SQLite数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很耗时的过程,会极大地影响数据库存取的速度。例如:向数据库中插入100万条数据,在默认的情况下执行相应的操作,就会打开和关闭文件100万次,所以速度当然会很慢。

分析:
在入库和更新过程中按照数据库事务的思想进行设计:SQLite执行入库、更新操作的方式是,语句执行对象句柄调用库函数打开文件、调用函数执行sql语句、关闭文件。这样的执行方式对于数量级别超大的文件的弊端就是每次执行sql语句的时候都要打开文件(假设百万级数量级的数据,就要打开和关闭文件百万次),对于数据库的入库和更新操作时间主要都浪费到了文件的打开和关闭操作上,所以这里增加事务以解决该问题.

解决:
SQLite数据库是支持事务操作的,于是我们就可以通过事务来提高数据库的读写速度。事务的基本原理是:数据库管理系统首先会把要执行的sql语句存储到内存当中,只有当commit()的时候才一次性全部执行所有内存中的数据库。同时,在.NET中对数据的操作还可以采用预编优化的方式来提升性能,这种方式是采用IDbCommand的Prepare方法来进行的。

示例:
以下引用网络上的一个示例数据来说明一下效果
引用地址:http://www.cnblogs.com/Kevin-moon/archive/2008/12/01/1344658.html
A、系统环境
OS:Windows XP Professional Server Pack 3
CPU:AMD K8 3200+(2.2G)
RAM:3G
HD:Seagate 160G IDE 7200RPM

B、代码环境
NET2.0、Access2003、Firebird 2.1.1.17910、SQLite 3.6.3
Firebird Data Provider(FirebirdSql.Data.FirebirdClient.dll, 2.1.0.0)
SQLite Data Provider(System.Data.SQLite, 1.0.60.0)

下是测试数据,仅予参考
测3次平均,无测10W+,因Firebird出现OutMemoryException
无测修改操作,因无需求
依序 1、10、100、1000、10000 条数据,单位 ms

新增操作
1.无预编, 无事务
Access:41、54、195、1610、16187
Firebird:9、19、189、1929、22125
SQLite:3、27、867、5002、53603

2.事务控制
Access:39、50、162、1278、12366
Firebird:11、30、60、587、5904
SQLite:4、4、10、73、739

3.预编译优化
Access:43、50、128、908、9100
Firebird:2、13、128、1322、15954
SQLite:4、26、465、4626、54608

4.预编译+事务控制
Access:42、46、102、676、6355
Firebird:3、4、22、211、2087
SQLite:3、4、8、41、378

查询比较
Access:39、42、40、51、181
Firebird:2、3、15、131、1294
SQLite:1、1、3、16、165

讨论:
Firebird性能不如预期、SQLite性能很好
Access事务支爰不强,但预编启性能很好
SQLite缺省已预编,加上事务控制性能更好
Access查询加排序,数据10W+时性能极差(I/O问题)
单测Firebird 10W+新增操作,性能极差(I/O问题)
10W+数据操作性能多卡在I/O,不过SQLite因规格单纯,所以性能会较强

总结:
1.通过事务一次提交多条SQL语句,以减少SQLLite数据的IO操作,可以有效提升大数据量操作的性能。
2.通过.NET中的预编译优化方式,即采用IDbCommand的Prepare方法来配合事务执行大批量SQL操作,可以进一步优化其性能。


  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Firebird是一个全功能的,强大高效的,轻量级,免维护的数据库。它很容易让您从单用户,单数据库升级到企业级的应用。 一个firebird数据库服务器能够管理多个独立的数据库,每一个数据库同时可支持多个客户端连结。 关键特性:支持原子性,并发性,隔离性等概念。 MGA:支持事务的多个版本功能, 存储过程: 使用PSQL(Procedure SQL),你可以创建强大的存储过程来处理服务上的所有数据,你可以使用select Stored Procedure的形式,使用存储过程,以得到一个虚拟的表结构的结果。这样的话,你就可以很容易的在报表中使用它。 事件:存储过程和触发器可以引发事件,这个事件可以被客户端程序监听到 生成子:生成子也称为序列,它可以很容易的实现自动增加的字段。它是一个INT64的长度,因此,它可以用在一个事务中,也可以用在其它很多方面。 只读数据库: 我们可以把数据库存放在CD中,形成一个只读数据库。如果我们的应用程序 也在光盘上,再加上嵌入式的FB数据库服务器,便可以得到一个无与伦比的 CDLIVE(即只用光盘就可以运行起来)应用。 全事务控制: 一个客户端可以存在多个并发的事务。并且每一个事务都可以独立的进行控制,两段提交功能可以保证数据库的一致性。锁优化机制也支持多个事务的保存点。 在线备份: 不需要停止数据库即可进行备份,一个备份进程产生一个数据库当前的快照。因此,用户可以在备份期间持续的工作,即实现24x7(每天24小时,每周7天) 的操作。 触发器: 每一个表可以有多个并发的行级触发器,可以在插入前,插入后,更新前,更新后,删除前,删除后进行触发。我们可以在触发器中写入PSQL语句,默认值,产生异常,firebird现在支持统一触发器,即可以一个触发器中,一次性管理插入,更新,删除的操作。 扩展函数: 我们可以使用C语言,C++,DELPHI写UDF,使用UDF(用户定义函数库)可以很容易的挂入数据库引擎中以扩展我们需要的功能 字符集:Firebird实现了很多国际标准的字符集,包括Unicode。 SQL标准兼容:Firebird 实现了全部SQL92所要求的功能,实现了SQL99最常用的的要求。包括但不限于"FULL/LEFT/RIGHT [OUTER] JOIN , UNION, DISTINCT , 子查询 (IN, EXISTS),内部函数 (AVG, SUM, MIN, MAX, COALESCE, CASE, ..), 主键,外键,唯一索引以及所有通用的数据类型。 Firebird还实现了域,字段级别的约束,视图,异常,规则和权限管理,更多的详细信息,请参考Firebird发布通知和参考手册。 硬件需求: Firebird可以工作最常见的硬件环境中,甚至非常差的硬件中,也能很好的工作,当然,硬件的要求依赖于你想做什么,例如 ,你有多少个并发用户等等。 有效的平台支持: Firebrid在常见的平台上都可运行,如Linux和Windows(包括Windows终端服务器)其它支持的平台包括(MAC OS(苹果机), Solaris及HP-UX) 把数据库从一个平台转到另一个平台,非常的容易,只要备份数据库,然后,再到另一个平台上恢复即可 可连接性: Firebird 支持一系列的连接方法,目前,可以通过原生的DELPHI,C++组件连接,也可以通过ODBC,JDBC,PHP,OLEDB,DbExpress进行连接。原生 的联连提供了直接调用Firebird的API函数库(fbclient.dll/.so)进行调用的能力。 物理限制: Firebird支持非常巨大的数据库,数据库可以分成多个物理文件。每个文件的大小依赖于操作系统的限制。当前一个数据库文件最大的理论限制是64T (即64000G),因此,常见的限制通常是操作系统的限制以及磁盘空间的限制。 服务器引擎版本: 当前有三个服务器版本。 标准服务器:每一个客户连接将引发一个服务器进程(支持多处理器) 超级服务器:一相服务器进程模块管理所有的客户端连接,当前不支持多处理器。 嵌入服务器:整个服务器引擎就是一个动态库,只支持本地通过IO进行调用。 但是,所有的服务器都使用一种数据库格式,因此,你可以很方便的在不同的引擎之间共享数据库文件的数据。 协议: Firebird协议使用IPL(interbase public license)和IDPL(Initial Developer's Public License),这种协议类似于Mozilla协议。你可以完全的自由使用并且可以自由的布署在你的客户应用上。 你不需要公开你的源代码。当然,如果你修改和数据库引擎,你应该公布源代码。 工具: 有很多的工具支持Firebird.包括自由的,免费的和商业的。 包括开发工具,管理工具,诊断工具等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值