snifer

【原创】谈谈嵌入式系统的数据库

0
阅读(1877)

基于嵌入式linux的数据库主要有SQLite, Firebird, Berkeley DB, eXtremeDB 等,其中Firebird是关系型数据库,功能强大,支持存储过程、SQL兼容等 。SQLite关系型数据库,体积小,支持ACID事务 Berkeley DB中并没有数据库服务器的概念,它的程序库直接链接到应用程序中 ,另外eXtremeDB是内存数据库,运行效率高。今天重点介绍一下SQlite数据库。

SQLite的源代码是C,其源代码完全开放。SQLite第一个Alpha版本诞生于2000年5月。 

SQLite有以下特性:支持ACID事务;零配置一无需安装和管理配置;储存在单一磁盘文件中的一个完整的数据库;数据库文件可以在不同字节顺序的机器间自由共享;支持数据库大小至2TB;足够小,全部源码大致3万行c代码,250KB;比目前流行的大多数数据库对数据的操作要快;提供了对事务功能和并发处理的支持,应用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。 

在下图的顶层是标记处理器(tokenizer)和分析器(parser)。SQLite有自己高度优化的分析器生成器,可以快速产生高效率的代码,并对内存泄漏有着特别的抵抗力。

在底部是基于Knuth 经过优化的B树,这样就可以运行在可调整的页面缓冲上,有助于将对磁盘的查找减到小。

再往下是页面高速缓存,它作用在操作系统的抽象层。这样的安排有助于数据库的移动。

体系结构的核心是虚拟数据库引擎(VDBE)。VDBE 完成与数据操作相关的全部操作,并且是客户和存储之间进行信息交换的中间单元。在SQL 语句被分析之后。VDBE开始起作用。代码生成器将分析树翻译成一个袖珍程序, 随后这些袖珍程序又被组合成用VDBE 的虚拟机器语言表示的一系列指令。如此往复,VDBE 执行每条指令,最终完成SQL 语句指定的查询要求。

blob.png

SQL i t e 命令行或者SQLitebrowse 等图形化工具建立数据库sysdb及表格user。这样就可以通过提供文件名和访问模式等参数来调用sqlite _open()以连接数据库,如“p_db=sqlite3_open(“./sysdb”,&db);”。如果想执行一个SQL 查询的话可以调用  sqlite_exec(),如“sqlite_exec(p_db, “select * from user;”, callback, 0,0);”

由于SQLite通过对每个记录执行callback 函数获得从数据库那里得到的结果,因此可以根据需要构造自己的callback函数用来实现具体的功能。最后以“sqlite_close(p_db);”语句关闭数据库即可。需要注意的是在程序编写及编译执行时应该注意sqlite.h、libsqlite.a、libsqlite.so的使用。

先简单介绍一下,下一讲会讲SQLite的应用。