嵌入式数据库SQLite在远程监控系统中的应用
随着后PC时代的到来,各种各样的新型嵌入式系统设备在应用数量上已经远远超过通用计算机。嵌入式开发已成为当前IT行业的热点。同时,越来越多的用户希望能对嵌入式环境下的数据进行更有效的管理,构建嵌入式数据库便是一个有效的方法,使用户能在嵌入式设备中方便地存储、检索或修改数据,实现大部分传统数据库的功能。嵌人式系统和数据库技术的紧密结合已经成为嵌入式开发的一个重要方向。
1嵌入式数据库SQLite
与传统C/s结构的各种大型关系数据库如Oracle,
SQL Server,MySQL等相比,在嵌入式系统中由于软硬件资源有限,不可能安装庞大的数据库服务器,而且在很多时候,用户只需要使用这些数据库产品的一些基本特性而已。嵌入式系统的开发环境决定了其数据库的特点:无需独立运行的数据库引擎,而是由程序直接调用相应的API实现对数据的存取操作。嵌入式数据库与其他数据库产品的区别是,前者是程序驱动式,而后者是引擎响应式。
SQLite是D.Richard Hipp在2000年开发的一个小型嵌入式数据库。他是完全独立的,不具有外部依赖性,可以较为方便地应用于嵌入式系统中。其源代码完全开放,可以免费用于任何用途,包括商业目的。SQLite虽然是个极端轻量级的关系数据库,却保留了数据库的大部分特征,他提供了对SQL92标准的大多数支持:支持多表和索引、事务、视图、触发和一系列的用户接口及驱动。其主要特征如下:
(1)支持原子的、一致的、独立的和持久的(ACID)事务特性,即使系统崩溃和掉电。
(2)零配置(Zero-configuration),无需安装和管理。
(3)一个完整的数据库存储在单一磁盘文件中。
(4)数据库文件可以在不同字节顺序的机器间自由共享。
(5)支持数据库大小至2 TB(2^41 B)。
(6)字符串和二进制大对象(BLOBs)的大小仅被有效内存限制。
(7)源码体积小,编译后低于250 kB。
(8)大部分的操作比关系型数据库引擎要快。
(9)简单易用的API。
SQLite由于小、快、简单、可靠,而且作者完全放弃版权,从他一发布出来,便深受欢迎。对于嵌人式环境,管理、执行、维护的简单化比企业数据库引擎提供的许多复杂应用更重要,因此SQLite数据库是一个很好的选择。
2 SQLite内部结构及开发技术
2.1 SQLite内部结构
SQLite采用模块化的设计,主要由4个部分组成:内核(Core)、SQL编程器(SQL Compiler)、后短(Backend)以及附件(Accessories)。内部结构如图1所示。
SQLite的接口是一些已经编写好的C库,即使使用不同语言的API,在底层仍然使用C库执行。SQL语句通过接口进入到高效的SQL编译器,由标记处理器(tokenizer)分解成柠檬分析器(parser)可以识别的各个标志符,然后由分析器重新组合标志符并调用代码生成器(codegeneratot)生成虚拟机器码,交由虚拟机(virtual machine)去执行,最终完成SQL语句指定的任务。虚拟机是SQLite内部结构的核心,不仅完成与数据操作相关的全部操作,而且还是客户和存储之间信息进行交换的中间单元。数据库按照B树(B-tree)的形式存储在磁盘上,通过可调整的页面缓冲(pager)获得对数据的快速查找和存储。为了方便移植,SQLite使用一个抽象层接口(OS interface)与不同操作系统进行对接。
2.2 SQLite开发技术
SQLite本身提供了C语言的API接口,使得对数据库的操作十分简单,主要是对3个API函数的调用。
其中,sglite3_exec()函数的第二个参数用来处理一条或多条SQL语句,语句间必须用";"号隔开。如果是查询(SELECT)语句,查询结果的每一条记录都必须调用第三个参数的Callback函数,第四个参数则为Callback函数的第一个参数指针。如果不是查询语句,第三、四个参数为NULL。所有SQL执行完毕后返回0,否则返回错误代码,可通过第五个参数值来查看详细错误信息。
3 SQLite在嵌入式远程监控系统中的应用
3.1 SQLite应用程序开发
基于嵌入式操作系统和嵌入式数据库系统构建的嵌入式楼宇配电远程监控系统的系统结构如图2所示。
本系统以32位的ARM微处理器S3C4510B为硬件开发平台,采用μClinux操作系统,移植了Boa服务器和SQLite嵌入式数据库。系统主要功能如下,从底层设备采集的现场数据,经过数据处理,保存到嵌人式数据库SQLite。用户可在任何和Internet相连的地方,通过Web浏览器便可实时监控设备状态。因此对数据库的访问有上端的以太网通信程序和下端的CAN通信程序。这里主要讨论以太网通信程序。下面以CGI程序访问数据库,然后在客户端浏览器动态显示的Display.cgi程序为例,说明SQLite数据库API函数的用法。程序主要代码如下:
3.2 SQLite应用程序交叉编译
S3C4
- 嵌入式数据库在Java中的应用(03-03)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- SQLite在嵌入式Wince中的应用(07-20)
- 基于Berkeley DB的机房环境监控系统(01-04)
- Perst嵌入式数据库存储结构分析与研究(03-20)