基于ARM-Linux的SQLite嵌入式数据库技术
2013-03-18许立
许 立
(中煤科工集团重庆研究院 重庆 400013)
0 引言
伴随嵌入式系统被广泛应用,加上用户越来越高的数据处理、数据管理等需求,各式各样的智能设备、数据库技术有着紧密的结合度,这种现状越来越受到各行业的重视。纵观国内外对嵌入式数据库的应用现状,可知,当下这种嵌入式数据库开始被广泛应用,其市场也加快发展步伐,进入一个可喜的发展阶段。
1 Linux 下常见的数据库技术分析
以Linux平台为基础的数据库数量繁多,通常,运用在大型商业方面的数据库就包括: Sybase、Oracle等下面简单罗列几种常见类型:
(1)PostgreSQLPostgreSQL不仅是全球最优秀的一类开放源码数据库,且使用它无需缴纳任何购买费与版权费,是对用户完全免费的。所以,很多Linux发行版本将之作为首选。比如,TurboLinux和Redhat都预装了该数据库。加上,该数据库具有很强大的兼容性,若为SQL92兼容,将之做移植则非常快捷、简单。
(2)MySQLMySQL是一种多进程、多用户的SQLserver数据库。它包含:一个mysqld、libraries的client或者server实现工具、client programs;较适宜于简单且小的数据库,不能很好支持复杂操作。其licensing policy表现为:若你是一般的终极用户,使用该数据库无需付钱;如果作为或直接或间接对该服务程序、相关产品加以出售的用户,抑或是在某客户端对其加以维护,这样的情况下,是需要付费使用的。若在发行版中含有MySQL,则需获得相应许可。
(3)mSQL(mini SQL)mSQL是面向单个用户的数据库的管理系统。其特点是短小精悍,因此,由它开发出来的一些应用系统颇受网络用户的青睐。该系统不是一款完全免费的软件。只有进行学术研究、在大学里使用、做慈善等不以营利为目的的一系列活动时,该软件才对使用者免费开放。如果不满足上属免费许可,就要进行付费才可以注册获得使用版权。
2 嵌入式开发
对数据库的需求特点面对种类繁多的数据库,怎么来选择适合嵌入系统的哪一款呢?后者的开发环境将直接决定它所需要的数据库种类。
(1)适当的体积嵌入系统对数据存储、程序运行通常有比较严格的空间限制。因此对适用该系统的数据库要具有适当体积。
(2)较强的功能嵌入式开发应用繁多,用户的基本需求决定,开发时要有个功能齐备、体积合适的数据库,这样才能更好的失序数据管理。开发人员所采用的技术应可以提供一份完备文档,且十分易于开发。
(3)开源的代码作为产品开发,开源代码既可以降低产品生产的成本,还可以完善产品维护,为产品稳定运行备以彻底解决手段。上述Sybase、Oracle等数据库技术,功能强大、体积庞大、付费使用、用于大型商用。MySQL体积中等,却可以提供同等功能,因此成为中小企业数据库的应用首选,在商业应用中不是免费的,对嵌入式开发,空间仍太大,目前尚不适合。mSQL是SQL的简化,开发方便、短小精悍,适于嵌入式开发,但使用期限只有30天,并不是完全开源。
3 SQLite的体系结构及开发技术
D·理查德·希普开发出SQLite,这种小型C库可以实现强大的嵌入式数据库的管理。它支持大多数的SQL92:多表、索引、视图、事务、触发、驱动、用户接口。该库内聚性很强,通过ANSI C代码老实现,可应用于包括商业在内的任何应用。此外,它具有有效、高速、可升级等优点,可运行于ARM/ Linux、SPARC / Solaris等多种类型的硬件平台。
3.1 体系结构
1SQLite体系结构SQLite 有种标准化的优雅设计。它主要分为八个子系统。其中,一些子系统与关系数据库的管理十分接近。顶层为标记处理器、分析器。SQLite的分析生成器是高度优化的,这种生成器能快速产生高效率代码。其新颖设计可以实现有效抵抗内存泄漏的效果。基于Knuth,底部为优化过的B树,可运行于页面缓冲之上,该页面缓存是能调整的,利于最大化降低磁盘查找。再往下为页面的高速缓存,作用于OS抽象层上方。
3.2 SQLite开发技术
对SQLite 进行API时非常好用的。三个执行SQL、获得数据函数就可实现。C语言的API是脚本接口之基础,比如,已经发布过的Tcl接口。
应用C语言三个步骤即可实现API。第一,提供访问模式、文件名来对“sqlite _open()”连接数据库进行调用。第二,执行“callback”函数,通过SQLite来对每条记录进行“callback”函数执行,以此获取来自数据库里的结果。第三,调用“sqlite_exec()”可执行某个SQL查询,且获得一个“callback”函数的指针。
SQLite可以提供“存取二进制大对象”方法,在数据库管理、线程安全、API扩展等一些方面提供方便而强大的技术支持。
在ARM-Linux平台,4SQLite实现SQLite,嵌入数据库以源码进行发布,可根据差异化平台来交叉编译源码,完成在众多硬件平台上的移植。编译的主要步骤如下:
(1)去“http://www.sqlite.org/”的cvs里去下载一个最新源代码包,对其进行解压,生成一个sqlite目录,然后,新建转到同级目录。
(2)“echo $PATH”命令下查看PATH里是不是已经含有编译工具——armlinuxgcc。
(3)在ARMLinux下确保sqlite可以正常运行,需要修改“sqlite/src/sqliteInt.h”,来确保btree变量大小是正确的。
(4)选择configure完成某些配置。对sqlite这一目录下的configure进行修改,使其不对交叉编译的环境进行检查。
(5)对Makefile文件进行修改。把代码行“BCC=armlinuxgccgO2”改为“BCC=gccgO2”。此外,通常以静态链接形式把sqlite置于ARMLinux硬件板进行运行,因此,继续将Makefile进行修改,找到“s以qlite:”为标记的代码段,把“libsqlite.la”改成“.libs/libsqlite.a”。完成上面的修改之后,使用make来生成s libsqlite.a 和libsqlite.so、qlite。
4 总结
经大量的分析、对比,结合嵌入式系统的开发特点,在大量数据库版本中选择出一款极为适合嵌入数据库的应用软件——SQLite。然后通过ARMLinux对SQLite完成编译,在此基础上,在项目中进一步进行开发试验。经实践证明,软件SQLite可以非常出色的满足系统的数据库应用要求。
[1]Michael Owens.Embedding an SQL Database with SQLite.Linux Journal, 20030601.
[2]How To Compile.http://www.sqlite.org/.
[3]薛启康.Linux环境下的数据库.中国计算机报,2001总期号:1009.