您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 嵌入式开发教程基于ARM-Linux的SQLite嵌入式数据库技术
下常见的数据库技术分析(1)PostgreSQL(2)MySQL(3)mSQL(miniSQL)(4)BerkeleyDB(5)SQLite2嵌入式开发对数据库的需求特点3SQLite的体系结构及开发技术3.1体系结构3.2SQLite开发技术4SQLite在armLinux平台上的实现5SQLite的应用开发6总结嵌入式移动互联网技术研发培训中心随着嵌入式系统的广泛应用和用户对数据处理和管理需求的不断提高,各种智能设备和数据库技术的紧密结合已经得到了各方面的重视。不久的将来嵌入式数据库将无处不在。纵观目前国际、国内嵌入式数据库的应用情况,目前基于嵌入式数据库应用的市场已经进入加速发展的阶段。嵌入式移动互联网技术研发培训中心基于Linux平台的数据库非常多,大型的商用数据库有Oracle、Sybase、Informix、Informix、IBMDB2等;中小型的更是不胜枚举,以下是常见的几种。嵌入式移动互联网技术研发培训中心PostgreSQL是世界上最优秀的开放源码的数据库之一,是完全免费的数据库,不需要任何版权费用和购买费。因此,它是许多Linux发行版本的首选,例如:Redhat、TurboLinux都预装了PostgreSQL。PostgreSQL兼容性很强,如果是SQL92兼容的,移植PostgreSQL非常简单和快捷。嵌入式移动互联网技术研发培训中心MySQL是多用户、多进程的SQLdatabaseserver。MySQL包括一个serverdaemon(mysqld)和clientprograms与libraries的client/server实现工具;比较适合小而简单的数据库,对复杂的操作要求支持不是很好。MySQL的licensingpolicy:如果你是普通的最终用户,使用MySQL不需要付钱;但如果是直接或间接地出售MySQL的服务程序或相关产品,或是在一些客户端维护MySQLserver并收取费用,或是在发行版中包括MySQL,就需要获得许可。*本课题是2003年河南省杰出人才创新基金项目(0321000300),获得了河南省科技厅的资金支持。嵌入式移动互联网技术研发培训中心mSQL是一个单用户数据库管理系统。由于它的短小精悍,使其开发的应用系统特别受到互联网用户青睐。mSQL并非是完全的freeware,若是在大学中使用此一软件,或是为了学术研究与慈善等非营利性目的,才能免费得到使用权(freelicense),否则就得付费注册才能得到正式的版权。嵌入式移动互联网技术研发培训中心BerkeleyDB是一个开放源代码的嵌入式数据库管理系统,能够为应用程序提供高性能的数据管理服务。应用它,程序员只需要调用一些简单的API就可以完成对数据的访问和管理。与常用的数据库管理系统(如MySQL和Oracle等)有所不同,在BerkeleyDB中并没有数据库服务器的概念。应用程序不需要事先同数据库服务建立起网络连接,而是通过内嵌在程序中的BerkeleyDB函数库来完成对数据的保存、查询、修改和删除等操作。嵌入式移动互联网技术研发培训中心SQLite支持绝大多数标准的SQL92语句,采用单文件存放数据库,速度又比MySQL快上1~2倍(官方的数据),存储量也不是问题。在操作语句上更类似关系型数据库的产品使用,非常方便。SQLite的版权允许无任何限制的应用,包括商业性的产品。在PHP5中已经集成了这个轻巧的嵌入式数据库产品。嵌入式移动互联网技术研发培训中心在众多的数据库中,如何选择适用于嵌入式系统的数据库呢?嵌入式系统开发环境决定了其对数据库需求的特点。(1)适当的体积嵌入式系统对于数据的存储与程序的运行一般都有较强的空间限制,所以适用于嵌入式系统使用的数据库首先应该有一个适当的体积。(2)较强的功能嵌入式开发中有很多应用,用户需求决定了开发中需要有一个大小适中且功能齐备的数据库来实现对数据的管理。对开发人员来说,要求采用的数据库技术提供完备开发的文档而且易于开发。(3)开源的代码作为产品的开发,开源的代码不仅可以减少产品的生产成本,更重要的是为产品的维护完善和稳定运行都提供了最为彻底的解决手段。嵌入式移动互联网技术研发培训中心上面介绍的数据库技术中,Oracle、Sybase、Informix、IBMDB2等功能强大,系统体积庞大,要求付费使用,仅适用于作为大型商业数据库。MySQL在保持中等体积的情况下,提供了较为适用的功能已经成为中小规模数据库应用的首选,但商业应用也要收费,而且对于嵌入式开发来说空间占用仍然太大,目前还不适用。mSQL是一种简化的SQL数据库,短小精悍,开发方便,适用于嵌入式开发;但mSQL只有30天的使用期限,并非完全的开源。余下的开放源码数据库中,PostgreSQL是Linux下最完善的开源SQL数据库,但体积也较大。BerkeleyDB作为完全开源的嵌入式数据库速度极快,可靠性高;但学习起来有一定难度,必然会加大开发成本。SQLite则简单易用,速度也很快,同时提供了丰富的数据库接口,功能虽较BerkeleyDB略有逊色,但在开源社区的推动下差距正在缩小。它的设计思想是小型、快速和最小化的管理。这对于需要一个数据库用于存储数据,但又不想花太多时间来调整数据性能的开发人员很适用。实际上在很多情况下,并不需要存储程序或复杂的表之间的关联。这时会发现SQLite在大小和功能之间找到了一个理想的平衡点。完全的开源代码使其可以称得上是理想的“嵌入式数据库”。嵌入式移动互联网技术研发培训中心SQLite是D·理查德·希普开发出来的用一个小型C库实现的一种强有力的嵌入式关系数据库管理体制。它提供了对SQL92的大多数支持:支持多表和索引、事务、视图、触发和一系列的用户接口及驱动。这个库有很强的内聚性,通过不到25000行的ANSIC代码实现,而且可以自由地应用于任何目的甚至包括商业应用。此外它还是高速、有效和可升级的,可以运行于从arm/Linux到SPARC/Solaris的多种硬件平台。嵌入式移动互联网技术研发培训中心图1SQLite体系结构SQLite有一种优雅、标准化的设计。它可以分成8个主要子系统,如图1所示,其中有一些相当接近于关系数据库管理。在图1的顶层是标记处理器(tokenizer)和分析器(parser)。SQLite有自己高度优化的分析生成器(柠檬分析器),可以快速地生产出高效率的代码,而且依靠它新颖的设计对内存泄漏有着特别的抵抗力。在底部是基于Knuth经过优化的B树。这样可以运行在可调整的页面缓冲(pagecache)上,有助于将对磁盘的查找减到最小。再往下是页面高速缓存。它作用在OS的抽象层之上,这样的安排有助于数据库的移动。体系结构的核心是虚拟数据库引擎(VDBE)。VDBE完成与数据操作相关的全部操作并且是客户和储存之间信息进行交换的中间单元。从各个方面来看,它都是SQLite的核心。在SQL语句被分析之后,VDBE开始起作用。代码生成器将分析树翻译成一个袖珍程序,随后这些袖珍程序又被组合成用VDBE的虚拟机器语言表示的一系列指令。如此往复,VDBE执行每条指令,最终完成SQL语句指定的查询要求。嵌入式移动互联网技术研发培训中心VDBE的机器语言由围绕于数据库管理128个操作码(opcode)组成。对于打开表,查询索引、存储和删除记录和很多其他数据库操作都有对应的操作码。在VDBE里的每条指令由1个操作码和3个操作数(operand)组成。一些指令使用全部(3个)操作数;也有些可能一个也未使用。这完全取决于指令的性质。例如Open指令,用于打开一个表的指针,使用了全部(3个)操作数:第1个操作数(P1)包含指针的ID号。第2操作数(P2)指出表的根位置(或者表的首页位置);而第3个操作数则是表的名字。对于Rollback指令则根本不需要操作数。为了进行一次RollbackVDBE,仅需知道是否要做Rollback\[1\]。嵌入式移动互联网技术研发培训中心SQLite的API极其易于使用,只需要三个用来执行SQL和获得数据的函数。它还是可以扩展的,允许程序员自定义函数然后以callback的形式集合进去。C语言API是脚本接口的基础,如已经发布的(Tcl接口)。开放源码团体已经扩展了众多的客户接口、适配器、驱动等,这就使得其他语言对SQLite的使用也成为可能。使用C语言API只需要三步。首先,要提供文件名和访问模式用来调用sqlite_open()连接数据库。然后,执行一个callback函数,SQLite通过对每个记录执行callback函数获得从数据库那里得到的结果。最后,如果想执行一个SQL查询并获得一个callback函数的指针,可以调用sqlite_exec()。除此之外还需要错误代码检查。SQLite可以通过对一个主键声明它为INTEGERPRIMARYKEY成为能够自动增加的主键,实现自增字段。SQLite还提供了存取二进制大对象(BLOBs)的方法,在线程安全、数据库管理、API的扩展等方面也都提供了强大方便的技术支持。嵌入式移动互联网技术研发培训中心SQLite嵌入式数据库提供了以源码发布的方式,要在众多的硬件平台进行移植,可以根据不同平台对源码进行交叉编译来实现。编译主要有以下几个步骤\[2\]:①到的cvs中下载最新的源代码包,解压后将生成sqlite目录,另外新建并转到一个与sqlite目录平行的同级目录,如make目录。②用“echo$PATH”命令查看PATH中是否已经包含交叉编译工具armlinuxgcc。③为了在ARMLinux下能正常运行sqlite,需要对sqlite/src/sqliteInt.h作一定的修改,以确保btree(B树)有正确的变量大小,如“ptr”和“char*”。不同体系结构的Linux,如x86和ARM,会有些差别。对于armLinux可以找到如下部分:#ifndefINTPTR_TYPE#ifSQLITE_PTR_SZ==4嵌入式移动互联网技术研发培训中心#defineINTPTR_TYPEint#else#defineINTPTR_TYPElonglong#endif在上面的代码前加上一句#defineSQLITE_PTR_SZ4这
本文标题:嵌入式开发教程基于ARM-Linux的SQLite嵌入式数据库技术
链接地址:https://www.777doc.com/doc-2517785 .html