Board logo

标题: 开源嵌入式数据库Bericel ey DB和SQLite的比较 03 [打印本页]

作者: samwalton    时间: 2014-4-28 07:27     标题: 开源嵌入式数据库Bericel ey DB和SQLite的比较 03

然,SQLite允许忽略数据类型,但是,仍然建议在Create Table语句中指定数据类型,因为数据类型有利于增强程序的可读性。SQLite支持常见的数据类型,如VARCHAR、NVARCHAR、TEXT、INTEGER、FLOAT、BOOLEAN、CLOB、BLOB、TIMESTAMP、NUMERIC、VARYING、CHARACTER、NATl0NAI, VARYINGCHARACTER。

另外,虽然在插入或读出数据的时候是不区分类型的,但在比较的时候,不同数据类型是有区别的。比如:CREATE TABLE MyTable (a INTEGER,b TEXT);  

INSERT INT0 MyTable VALIUES(0,0);  

当执行查询  

SELECT count(*)FROM MyTable WHERE a==’00’;时,会返回一条记录。因为字段a的类型是整型,而数字00与0是相等的。而执行查询  

SELECT count(*)FROM MyTable WHERE b==‘00’:时,则不会返回记录。因为字段b是字符类型,字符“00”与“0”是不相等的。

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系统之间的兼容性。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0