您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术开源嵌入式数据库Bericeley DB和SQLite的比较 正文
开源嵌入式数据库Bericeley DB和SQLite的比较

开源嵌入式数据库Bericeley DB和SQLite的比较

点击数:7702 次   录入时间:03-04 12:03:42   整理:http://www.55dianzi.com   嵌入式系统-技术
       1 嵌入式 数据库  

      通常,我们采用数据库来实现对数据的存储、检索等功能。

www.55dianzi.com        Berkeley DB不是关系型的 数据库 ,不能应用标准的SQL语句对数据库操作,对它的操作要调用专用的API实现。这些API提供了查询、插入、删除等功能。比如com.sleepycat.db.Db类代表数据库对象。Db类的put( )方法完成的是插入功能;get( )方法完成的是读出数据的功能;com.sleepycat.db.Dbc是Berkeley DB的游标类,提供了遍历数据库记录的功能。

      使用Berkeley DB提供的函数来进行数据库的访问和管理并不复杂。在大多数场合下,只需按照统一的接口标准进行调用就可以完成最基本的操作,Berkeley DBEnvironment为一组数据库同时提供参数设置。更为重要的是,如果要应用更高级的特性,必须要使用Environment功能,比如在要对保存的数据进行加密存储、利用其Transaction、数据加密、同步加锁控制、错误日志等功能的时候。

       SQLite的SQL语言很大程度上实现了ANSI SQL92标准,特别是支持视图、触发 器、事务,支持嵌套SQL。它通过SQL编译器(SQL Complier)来实现SQL语言对数据库进行操作,支持大部分的SQL命令,如attach database、begin transaction、comment、commit transaction、copy、create index、create table、create trigger、create view、delete、detach database、drop index、drop table、drop trigger、drop view、end transaction、explain、expression、insert、On conflICt clause、pragma、replace、rollback transaction、select、update。

www.55dianzi.com        u_int32_t ulen;   

       u_int32_f dlen;   

       u_int32_f doff;   

       u_int32_f flags;   

       }DBT;   

       在使用Berkeley DB进行数据管理时,缺省情况下是一个关键字对应于一个数据;但也可以将 数据库 配置成一个关键字对应于多个数据,而键值和数据必须是类com.sleepycat.db.Dbt的对象或其子类的对象。

        (2)对象句柄

      在Berkeley DB函数库定义的大多数函数都遵循同样的调用原则:首先创建某个结构,然后再调用该结构中的某些方法。从程序设计的角度来讲,这一点同面向对象的设计原则是非常类似的,即先创建某个对象的一个实例,然后再调用该实例的某些方法。正因为如此,.Berkeley DB引入了对象句柄的概念来表示实例化后的结构,并且将结构中的成员函数称为该句柄的方法。对象句柄的引入使得程序员能够凭借面向对象的思想,来完成对Berkeley DB数据库的访问和操作。

      (3)错误处理

      对于任何一个函数库来说,如何对错误进行统一的处理都是需要考虑的问题。Berkeley DB提供的所有函数都遵循同样的错误处理原则,即函数成功执行后返回零,否则返回非零值。

     对于系统错误(如磁盘空间不足),返回的是一个标准的值;而对于非系统错误,返回的则是一个特定的错误编码。例如,如果在数据库中没有与某个特定关键字所对应的数据,那么在通过该关键字检索数据时就会出现错误。此时函数的返回值将是DB—NOTF0uND,表示在数据库中并没有所请求的关键字。所有标准的e rrn0值都大于零,而由Berkeley DB定义的特殊错误编码则都小于零。

       Berkeley。DB提供了相应的函数来获得错误代号所对应的错误描述。一旦有错误发生,只需首先调用db_strerror( )函数来获得错误描述信息,然后再调用DB一>err()或DB->errx()就可以很轻松地输出格式化后的错误信息。

       而SQLite最大的特点在于其数据类型为无数据类型(typelessness)。这意味着可以保存任何类型的数据到所想要保存的任何表的任何列中,无论这列声明的数据类型是什么。虽然在生成表结构的时候,要声明每个域的数据类型,但sQLite并不做任何检查。开发人员要靠自己的程序控制输入与读出数据的类型。这里有一个例外,就是当主键为整型值时,如果要插入一个非整型值时会产生异常。

       诚然,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 MyTableVALIUES(0,0); 

www.55dianzi.com

       当执行查询 



www.55dianzi.com       Berkeley DB虽然是 开源 的产品,但对某些条件下的商业性应用,却不是免费的,而且价格颇为昂贵。这些商业条件包括排除了开源的情况,不发放分布版本的情况等。SQLite是源代码完全的开放,可以免费用于任何用途,包括商业目的。

       结语

       随着人们对移动数据处理和管理需求的不断提高,与各种智能设备紧密结合的 嵌入式 数据库 技术已经得到了学术界、工业界、民用部门等各方面的广泛重视。嵌入式数据库将会使得人们希望随时随地存取任意思数据信息的愿望成为现实,嵌入式数据库将无处不在。开源的嵌入式数据库Berkeley DB和SQLite,内核微小,有能够充分适应硬件的能力,能很好地适应嵌入式系统的需要。在具体的嵌入式应用中可以根据具体情况选择应用。




本文关键字:嵌入式  数据库  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术

《开源嵌入式数据库Bericeley DB和SQLite的比较》相关文章>>>