SQLite 和 Berkeley DB 的比较

   一、内存数据库:FastDB、BerkeleyDB、SQLite

   内存数据库, 顾名思义就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。

 最近要做一个项目,需要用到实时数据库,PI太贵了,想找一个免费的,实在不行就只能自己编了。找了半天,找到了FastDB、BerkeleyDB和SQLite.

        FastDB是内存型数据库,据说很快,但数据库大小不能大于物理内存,不然。。。反正我看到这就走了,我可是要一秒内处理几千个数据,还要保存8小时以上的啊!

        BerkeleyDB和SQLite倒没有数据库大小不能大于物理内存的限制,我对他们的性能进行了测试,结果如下:

 

 
Berkeley DB
Sqlite
插入10000条记录耗时
0.08
0.42
插入100000条记录耗时
2.31
3.81
插入7200000条记录耗时
1024.34
249
插入57600000条记录耗时
12860.78
2155.14
插入172800000条记录耗时
48039.64
6352.06
10000条记录查1记录耗时
少于0.01
少于0.01
100000条记录查1记录耗时
少于0.01
少于0.01
7200000条记录查1记录耗时
少于0.01
少于0.01
57600000条记录查1记录耗时
0.03
0.16
172800000条记录查1记录耗时
0.03
0.09
10000条记录数据库大小
0.628M
0.527M
100000条记录数据库大小
5.29M
5.32M
7200000条记录数据库大小
516M
405M
57600000条记录数据库大小
3087.13M
3925.8M
172800000条记录数据库大小
11890.7M
10621.2M
*机器配置:Core2 E4500CPU2G内存 

       上表为两种数据库只建一个索引,Berkeley DB不支持事务、Sqlite支持事务情况下的数据,如果Berkeley DB打开事务支持,速度会下降很大的数量级,根本不能满足需求。另外在程序崩溃后Berkeley DB数据库不可用,Sqlite数据库仍可正常使用。

    其实:Berkeley db不用一下子提交这么多数据,可以将大数据量分步操作, 插入100000条记录和插入10000条记录 的区别是前者插入10000条记录十次!这样算下 更省时间!

    Bdb并发性方面比sqlite强,所以商业上BDB用的比较多。Android和iOS手机系统中使用sqlite


总结:1、fastdb挺快,但可惜数据库超过内存容量,插入和查询速度就会慢下来;

2、 Bdb 在并发性方面比sqlite强很多;

3、 Bdb插入和查询速度比 sqlite稍快


二、sql事务 Transaction

事务,批量插入

可以通过使用 BEGIN 命令手工开始一个事务。这种事务将会持续到下一个 COMMIT 或 ROLLBACK 命令为止。但如果数据库关闭,或者发生错误并且 ROLLBACK 冲突解决算法已指定的情况下,事务也会回滚。

BEGIN TRANSACTION

COMMIT TRANSACTION  或 ROLLBACK TRANSACTION

END TRANSACTION 是 COMMIT 的一个别名

事务可以延迟执行(deferred),立即执行(immediate)或排它执行(exclusive)。 缺省的事务行为是延迟地。延迟意味着直到数据库第一次被访问之前不需要加锁。

如此,对于一个延迟的事务,BEGIN命令什么也不做。直到第一个读或写操作之前, 不需要加锁。对数据库的第一个读操作会产生一个共享锁(SHARED), 第一个写操作会加一个保持锁(RESERVED)。由于对锁的需要是延迟的, 直到确实需要为止,在当前进程执行BEGIN之后, 有可能其它的进程或线程会启动一个另外的事务并写到数据库。

如果事务是立即的,那么,执行BEGIN命令将立即在所有数据库上获得一个RESERVED锁, 而不用等待数据库被访问到。在BEGIN IMMEDIATE之后, 可以保证没有其它进程下写入数据库中执行BEGIN IMMEDIATE或BEGIN EXCLUSIVE。 但其它进程仍可以从数据库中读数据。

一个排它的事务将在所有数据库上获得 EXCLUSIVE 锁,在该事务结束之前,没有任何其它线程或进程可以读、写数据库。


三、嵌入式数据库:SQLite,Berkeley DB,Firebird

    嵌入式数据库是指运行在本机上、不用启动服务端的轻型数据库,它与应用程序紧密集成,被应用程序所启动,并伴随应用程序的退出而终止。
      从这个意义上讲,似乎所有单机数据库都可以算嵌入式数据库,比如Access,Paradox,DBF等等,因为它们都不用启动数据库服务器即可使用。然而,我们通常不将上述数据库归入嵌入式数据库,而只将它们归入“桌面数据库”,甚至“文件型数据库”,因为这些数据库的完备性、存储容量及性能方面存在较大的缺陷。
      嵌入式数据库支持的数据都是TB文件级别,更由于嵌入式数据库具备高性能的特点,可以预测,单机数据库的未来将是嵌入式数据库的天下。

嵌入式数据库三雄
     目前,嵌入式数据库市场主要由三个产品分割:SQLite,Berkeley DB,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。


Berkeley DB    主页:http://www.oracle.com/database/berkeley-db/index.html

Berkeley DB是由美国Sleepycat Software公司开发的一套开放源码的嵌入式数据库的程序库,它于1991年发布,号称“为应用程序开发者提供工业级强度的数据库服务”,可谓是老牌悍将。Sleepycat现已被甲骨文(ORACLE)公司收购。

Berkeley DB的特点如下:

1、嵌入式,无需安装配置。
2、为多种编程语言提供了API接口,其中包括C、C++、Java、Perl、Tcl、Python和PHP等等。
3、轻便灵活。它可以运行于几乎所有的UNIX和Linux系统及其变种系统、Windows操作系统以及多种嵌入式实时操作系统之下。
4、可伸缩。它的Database library才几百KB大小,但它能够管理规模高达256TB的数据库。它支持高并发度,成千上万个用户可同时操纵同一个数据库。


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)。


嵌入式数据库特性对比

产品名称 SQLite   Berkeley DB   Firebird嵌入服务器版

当前版本: 3.3.8、4.5.20、2.0
速度:最快、快、快
稳定性:好、好、好
数据库容量:2TB、256TB、64TB
SQL支持:大部份SQL- 92、不支持、完全SQL-92与大部份SQL-99
Win32平台下最小体积:374KB、840KB、3.68MB
数据操纵:SQL、仅应用程序接口、SQL

开发接口:C, C++, PHP, Java, Delphi, Python .net(有些是第三方厂商开发的)

从以上对比中,我们可以看到,最短小精悍的是SQLite,它的性能也是最高的,Berkeley DB比较特殊,因为它不是用SQL语言来操纵数据的,Firebird嵌入版的体积对比之下显得稍大了些,但它对关系数据库特性的支持是最好的,如果要考虑到今后或许要将数据库升级成网络版本,就要选Firebird了。


  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值