嵌入式数据库
知识点:
嵌入式数据库的特点与种类
mSQL安装与配置
mSQL数据库基本操作函数
本次课将介绍嵌入式数据库的基础知识。首先,分析嵌入式系统中的数据库的特点、现状及其发展;然后,重点讨论mSQL在嵌入式Linux中的应用,将详细介绍它的安装、配置及数据库的建立过程,并结合mSQL提供的API函数讨论其数据表的操作;最后,通过一个完整的实例示范如何在用户应用程序中操作mSQL数据库。
1.1嵌入式系统中的数据库
同多数计算系统相似,嵌入式系统也常常需要数据库支持。虽然很多情况下可以用文件方式实现部分数据库功能,但是当应用程序需要执行一些比较复杂的数据操作(如数据排序或检索)时,文件方式就无能为力了。正因为如此,越来越多的厂商及个人开发出性能各异的嵌入式数据库产品,并且在实际应用中不断发展完善。
1.1.1嵌入式数据库特点
由于应用环境的特殊限制。嵌入式数据库相对普通数据库系统而言有其自身特点:
A. 支持常用嵌入式系统(如Linux,Windnws CE,Palm OS等多种操作系统)和通
信协议。内核小,占用内存少。
B. 提供数据库功能的自由定制,能够根据具体应用或行业特点定制系统功能。
C. 方便的查询功能,支持SQL查询语句。
D. 完善的数据管理功能,支持SQL标准的子集,提供数据库及数据表的管理等功能。
E. 操作简单方便,提供简明的API接口,可在高级语言中方便调用。
1.1.2嵌入式数据库现状与发展
数据库技术发展的原动力主要来自于不断扩大的应用需求及其支撑技术的成熟。嵌入式数据库随着各种移动设备、智能计算设备、嵌入式设备的发展而迅速发展。随着嵌入式应用对数据管理的要求不断提高,嵌入式数据库技术的地位也日显重要,它将在各个应用领域中扮演越来越重要的角色。
目前国际、国内嵌入式数据库产品及其应用处于一种“百花齐放、百家争鸣”的状态,应用需求多种多样,计算平台也是各有特色,还没有任何一家厂商能够做到一统天下。
随着各种移动设备和嵌入式设备进入普通百姓的日常生活,信息共享及交流己成为人们生活中不可缺少的一部分。人们每天面对各种瞬息万变的信息资料,如果没有数据库的帮助,这一切都是不可能实现的。
此外.在未来的军事、航空、国土资源管理、移动医疗等领域嵌入式数据库系统也将占据主导作用,嵌入式数据库技术将使得信息在未来生活中无处不在、无时不在。
1.2 mSQL简介
Mini SQL (mSQL )是嵌入式数据库家族中的佼佼者,它由澳大利亚的David J. Hughes开发,目前最新版本是mSQL 3.8。本章将以.SQL 3.0为例对其进行相应的介绍。
Mini SQL是一种小型的关系数据库管理系统。说它小,是因为它自身结构紧凑小巧,占用系统资源少,不像大型通用数据库那样动辄数百兆字节。事实上,mSQL功能十分强大,足以胜任大型数据集的索引、查询任务。当然,mSQL终究是个小型数据库系统,它的设计初衷是用于资源较少的环境下,所以某些标准SQL的功能它并不支持。
mSQL的1.x版本只能支持有限数目记录的数据集,2,0版本的数据库引擎已经设计为可以处理大型记录集,可以为有百万笔记录的大型记录集提供快速而一致的存取。mSQL 2.0还包括了新的w3-mSQL WWW接口套件,通过使用W3-mSQL.应用程序可将mSQL及其他程序结构直接植入HTML源代码而实现快速开发,这样就不必再为每一个具有动态内容的网页编写大量脚本。但是这些版本在功能可配置方面都做得不是很好,因此不适合在嵌入式系统中使用。
从mSQL 3.0版本开始,mSQL加入了许多新特性,其中最重大的改变是它提供了两种版本的服务器端程序,以适应不同应用需求。一个是单进程的服务器mrsql3d,另一个是多进程的服务器msql3_broker。单进程版本服务器与mSQL 2.x的相同,而多进程版本服务器则允许多个客户端同时连上服务器,而且客户端数目可设置。mSQL 3.0还扩大了对标准SQL语法的支持范围,并且它对CPU和内存的利用率更高。这些新特性使得mSQL 3.x无论是在企业级应用还是在系统资源紧张的嵌入式系统中都能轻松胜任。
1.3在Linux上安装和配置mSQL
1.3.1mSQL的安装
SQL以两种形式发布:一种是RpM软件包方式;另一种是用tar压缩的源代码方式。
RPM软件包的安装很简单,命令如下:
rpm -ivh rnsql-3.0-RELEASE.i386.rpm
RPM软件包管理器简化了系统更新的步骤,一个简单的命令就完成所有文件的安装。
以源代码方式发布的mSQL的安装则要麻烦一些。首先,用tar程序解开压缩包:
tar -xvf msql-3.0.tar.gz
该命令会在当前目录中建立一个新的目录rnsql-3.0-RELEASE,它用于存放所有的发布文件,包括源代码目录src及文档目录doc。接下来的安装步骤与一般使用autoconf接口的Linux应用程序的安装步骤有所差异,这里使用setup程序来设置后面的编译选项。所以,接下来应该调用命令:
./ setup
该命令会将一些编译选项保存在src/site.mm文件中,如果用户需要改变mSQL程序的安装路径以及C编译器的类型,可以修改该文件中的对应内容。程序的默认安装路径为/usr/local/msql3。
接下来,即可开始编译mSQL的源程序,执行如下命令:
./make all
如果编译完成并且正确,则可以开始安装mSQL,只需简单输入以下命令:
./make install
至此,rnSQL即被正确安装在系统中,可以开始使用。
1.3.2交叉编译mSQL
之前安装mSQL时对src/site.mm文件作了简单说明,交叉编译时需修改此文件。下面列出了将要修改的地方:
COMPILER= gcc –Wall
修改为COMPILER= /usr/local/arm/2.95.3/bin/arm-linux-gcc –Wall
CPP= gcc –E
修改为CPP= /usr/local/arm/2.95.3/bin/arm-linux-gcc –E
RANLIB= ranlib
修改为RANLIB= /usr/local/arm/2.95.3/bin/arm-linux-ranlib
AR= ar
修改为AR= /usr/local/arm/2.95.3/bin/arm-linux-ar
TARGET= Linux-2.4.20-8-i686 修改为TARGET= arm-linux
修改后即可编译安装了,和本地安装过程是一样的。
在本设计的实现中,移植mSQL时出现了一些问题,特别是目标板上原libc库与mSQL3.0所要求的libc库版本不同。将移植好的mSQL文件拷贝到目标板根文件系统上后启动mSQL数据库系统,运行命令:
$ ./msql3_borker &
串口输出错误信息:
$ ./msql3_broker:/lib/libc.so.6:version“GLIBC_2.2.3” not found (required by /lib/libnsl.so.1)
由提示信息可知,是有关glibc库版本的问题,查看开发板文件系统中lib库目录下的glibc库的版本号,使用命令:
$ string /lib/tls/libc.so.6 | grep GLIBC
在命令终端显示libc库所支持的GLIBC版本:
GLIBC_2.0
GLIBC_2.1.1
GLIBC_2.2.1
GLIBC_2.2.2
GLIBC_PRIVATE
可以看出根文件系统上的libc库最高只支持GLIBC_2.2.2,不能满足mSQL3.0对GLIBC的要求。经试验发现,arm-linux-gcc2.95.3和arm-linux-gcc3.4.1两个版本的交叉编译工具链的libc库都支持GLIBC_2.2.3及其以上版本。经过对比发现了3.4.1版本的libc库大小为3MB,而2.95.3版本的libc库大小为4MB,为了减小根文件系统的大小,使其满足嵌入式系统体积尽可能小的目标,故选用3.4.1版本的libc库。用命令将arm-linux-gcc3.4.1版本下的ld-2.2.3.so、libc.so.6和ld-linux.so.2拷贝至目标板根文件系统。然后便能在目标板正常运行mSQL服务器。
1..3.3 mSQL系统配置
mSQL 3.0的系统配置文件名为msql .conf,位于安装目录下(默认为/usr/local/msql3 ) 另外,所有标准mSQL应用程序及公用程序都可以通过在执行时加上-f参数来指定一个非标准的配置文件,以强制改变原有的默认参数值。这时当应用程序没有找到配置文件(或虽找到但有部分参数未设定),就会自动使用默认值。
1.配置文件格式
配置文件由若干个段(section)组成,可包含空白行及注释,在注释之前应有“#”字符。每个段落都有一个段落标题,用方括号括起作为段落名称(例如:[general] )
段落中参数值的设定方法:在参数名称之后跟上一个等号和相应的参数值,等号之后的参数值即为新值,但是每一行只能有一个参数设定项。如果配置文件中某些参数值未设定,则rnSQL执行时会使用内部默认值。
2.配置文件参数说明
(1)General段。
mSQL运行中使用的一些通用参数,一般在配置文件的general段设定,下面分别介绍各个参数的意义。
Inst_Dir: mSQL安装路径,默认为/usr/local/msql3。
DB_Dir:用户建立的数据库文件保存路径,默认为%I/msqldb.这里的%I代表上
面的Inst Dir.即DB_ Dir的默认为/usr/local/msql3/msqldb。
Msql_User: mSQL服务器当前用户,默认值为daemon。若有别的用户激活服务
器,则系统的用户号UID会发生改变。 Admin_User:特权用户,默认值为root。特权用户可以执行特权操作,如数据库
的建立与关闭等。
Pid_File: mSQL服务器进程号PID的保存文件完整路径,默认为%I/msql3d.pid
TCP_Port: rnSQL服务器的TCP服务端口,默认为11140基于TCPIIP网络的客
户端通过这个端口与服务器连接。
UNIX_Port: mSQL服务器UNIX套接字文件完整路径,默认为%I/msql3.sock。本
机客户端通过这个套接字文件与服务器连接。
(2)System段。
MSQL的系统参数在配置文件的system段中设定,下面分别介绍各个参数的意义。
.Msynch _Timer:定义mSQL服务器自动使内存数据与硬盘数据的间隔时间同步,以
秒为单位,默认值为30a如果该值设为U,则服务器不自动使内存与硬盘数据同步。
Hostes_ Lookup:决定是否需要土机IP地址。默认值为True,表示不符合主机名称的连接请求将被拒绝。
Read_only:设置服务器工作模式为只读,拒绝任何修改数据库的操作(只接受
select查询指令)。默认值为False 。
Remote_Access:允许基于TCPIIP网络的远端用户访问mSQL服务器,默认值为False。
Local_Access:允许本机用户应用程序访问mSQL服务器,默认值为True。
Query_Log:生成日志文件,以保存服务器接收及处理的所有查询请求,默认值为False 。
Query_Log _File:如果Query_Log参数被设为True,则应设置Query_Log _File为该日志文件的完整路径,一般设置为%I/rnsql.log。
Force_ Munmap:设置mSQL服务器自己完成同步内存映像文件的任务,而不依靠操作系统来完成,这样做可以保证在性能不稳定的操作系统中的数据的完整性。默认值为False。
Nurn_Children:设置mSQL多进程服务器可以同时处理的任务数。默认值为2。
Table_ Cache:设置数据表缓冲区中容纳的记录数.默认值为8。这个数值越大,
所占用的内存及文件描述符越多,所以在嵌入式系统中这个数值可以设得小一些,但不能小于20
Sortes_Maxes_Mern:设置执行ORDER BY或DISTINCT操作时所占用的最大内存,默认值为1000。
3.配置文件范例
要配置出合适的mSQL数据库管理系统,所要做的工作就是修改其配置文件msql.conf。
在实际应用中经常需要改动的是Msql_Uer和Admin_User这两个参数。Msql_USER用于设置运行mSQL数据库服务器程序的用户,而Admin_User用于设置能对mSQL数据库系统执行特权操作的用户。因此,如果设置Msql_User = dlrman, Admin_User=admin,则表示将由dhman用户运行服务器程序,由admine用户执行特权操作。
配置完成后,以root身份登录,创建dbman用户,命令如下:
Useradd -g sqlusers dhrnan
接下来,将/usr/local/msql3目录下的文件及目录的拥有者改为dhman,执行以下命令:
Chown -R dbrnan
再进/usr/local/msql /bin目录,输入如下命令: