SQLite 和 Berkeley DB 的比较

2022-04-14 00:00:00 数据 数据库 支持 事务 嵌入式

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

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

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

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

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

*机器配置:Core2 E4500CPU、2G内存
上表为两种数据库只建一个索引,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了。
————————————————

原文链接:https://blog.csdn.net/pjl1119/article/details/79991132

相关文章