2.3 Betkeley DB和SQLite数据存储方式比较
Berkeley DB对任何存入的数据都是按原样直接存储到数据文件中去,无论其是二进制数据还是A S C I I或Unicode等编码的文本。Berkeley DB提供了四种存储数据的模式:Btree、Hash、Queue和Recno。在打开数据库的时候,要指定一种存储模式。比如,上例中open( )方法中的参数Db.DB_BTREE就是指定以Btree模式打开数据库。
SQLite只提供了Btree存储数据的模式。对二进制数据,SQLite不能直接保存,但可以先将二进制的数据转换成ASCII编码,然后再保存。Base64.编码机制是最常见的把二进制数据转换成ASCII编码的手段。在SQLite的C语言代码encode.c中,提供了Base64编码的功能。
Btree模式是以排序的二叉树的方式存储的,Hash是以线性哈希表的方式存储。Queue用逻辑记录号作为键值,以定长的数据为记录值。Recno方式也以逻辑记录号作为键值,但可以保存定长或变长的记录值。这里提到的逻辑记录号有两种,即可变的和固定的。可变逻辑记录号会根据数据记录的增加与删除作相应的变化。Queue模式下,逻辑记录号只能是固定方式。Recno模式则可通过配置来选择是采用哪种类型的记录号作为键值。Btree模式也可以通过设置,将可变的逻辑记录号作为键值。
这几种存储模式各有优缺点,当键值不想用逻辑记录号时,Btree或Hash是必须的选择。Btree方式比较适合连续的顺序读取。比如,当键值是时间值,如果经常有从某一时间点开始连续读取后继的记录的操作,Btree是一种很好的选择。对随机的跳跃式读取,Hash模式则更为恰当。Queue和Recno都以记录号为键值,但前者适合先进先出的读取方式。Recno则通常是存取变长文本记录的理想存储模式。
2.4 Berkeley DB和S0Lite适用的系统
Berkeley DB为许多编程语言提供了实用的API接口,包括C、C++、Java、:Perl、Tcl、Python和PHP等。它适用平台UNIX/POSIX systems、win32以及嵌入式操作系统WinCE、VxWorks等。
通过Wrapper,SQLite实现了与其它语言的连接。所谓Wrapper即对SQLite提供的接口进行封装,使其它语言可以访问,使用SQLite。SQLite本身提供C和Tcl的接口,世界各地的程序员还提供了各种语言的SQLite的接口封装, 如Python、C++、Java、.Net等几乎所有流行的语言基本都有。sQLite提供一个抽象的操作系统接口层,来保证其在POSIX 与 Win32系统之间的兼容性。
2.5 其它方面
Berkeley DB没有数据库服务器的概念,使用简单的函数调用接口来完成所有的数据库操作,不使用SQL语言;接口简明实用,避免了对结构化查询语言进行解析和处理所需的开销,提高了执行速度;速度极快,可靠性高,但学习起来有一定难度。SQLite则简单易用,速度也很快,但功能却较Berkeley略有逊色,比如加密功能、二进制数据的处理等。
Berkeley DB虽然是开源的产品,但对某些条件下的商业性应用,却不是免费的,而且价格颇为昂贵。这些商业条件包括排除了开源的情况,不发放分布版本的情况等。SQLite是源代码完全的开放,可以免费用于任何用途,包括商业目的。
结语
随着人们对移动数据处理和管理需求的不断提高,与各种智能设备紧密结合的嵌入式数据库技术已经得到了学术界、工业界、民用部门等各方面的广泛重视。嵌入式数据库将会使得人们希望随时随地存取任意思数据信息的愿望成为现实,嵌入式数据库将无处不在。开源的嵌入式数据库Berkeley DB和SQLite,内核微小,有能够充分适应硬件的能力,能很好地适应嵌入式系统的需要。在具体的嵌入式应用中可以根据具体情况选择应用。
--
原文链接: http://www.ednchina.com/Article/html/2006-05/2006528070408.htm
|