sqlite查询表是否存在 表查询 如图:

数据库(9)
每一个 SQLite 数据库都有一个叫 SQLITE_MASTER 的表, 里面存储着数据库的数据结构(表结构、视图结构、索引结构等),只可以对他使用查询语句
SQLITE_MASTER 表DDL信息如下:
CREATE TABLE sqlite_master (type TEXT,name TEXT,tbl_name TEXT,rootpage INTEGER,sql TEXT);
type 类型 (如表、视图、索引等) &name 名称 &tbl_name 所属表名称 SQL (表、视图、索引)的DDL语句
对于表来说,type 字段永远是 ‘table’,name 字段永远是表的名字。所以,要获得数据库中所有表的列表, 使用下列SELECT语句:
SELECT name FROM sqlite_master WHERE type=’table’ ORDER BY
对于索引来说,type 等于 ‘index’, name 则是索引的名字,tbl_name 是该索引所属的表的名字, 使用下列SELECT语句:
SELECT name FROM sqlite_master WHERE type=’index’ ORDER BY对于视图来说,type 等于 ‘view’, name 则是视图的名字,tbl_name 是该视图所属的表的名字, 使用下列SELECT语句:
SELECT name FROM sqlite_master WHERE type=’view’ ORDER BY
不管是表或视图还是索引,sql 字段是原先用 CREATE TABLE 、CREATE VIEW 或 CREATE INDEX 语句创建它们时的命令文本。对于自动创建的索引(用来实现 PRIMARY KEY 或 UNIQUE 约束),sql字段为NULL。
SQLITE_MASTER 表是只读的。不能对它使用 UPDATE、INSERT 或 DELETE。 它会被 CREATE TABLE、CREATE INDEX、DROP TABLE 和 DROP INDEX 命令自动更新。
通过以下语句可查询出某个表的所有字段信息
PRAGMA table_info([tablename])
例如&PRAGMA &table_info(student)
注意 PRAGMA 必须大写&
当然字段信息也可以从sql字段中获取
每一个 SQLite 数据库都有一个叫SQLITE_TEMP_MASTER的表存储着临时表及其索引和触发器&临时表不会出现在
SQLITE_MASTER 表中。SQLITE_TEMP_MASTER 跟 SQLITE_MASTER 差不多, 但它只是对于创建那些临时表的应用可见。如果要获得所有表的列表, 不管是永久的还是临时的,可以使用类似下面的命令:
SELECT name FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master) WHERE type=’table’ ORDER BY
查询视图或索引只需把table修改成view或index即可
每一个 SQLite 数据库都有一个叫ANDROID_METADATA的表 存储着语言和地域信息,虽然简单但必不可少。如被其不小心删除,可以手工创建一个ANDROID_METADATA
ANDROID_METADATA表DDL信息如下
CREATE TABLE android_metadata(locale text);
创建完表后需插入一行数据
insertinto android_metadata(locale) values(&zh_CN&);
每一个 SQLite&数据库都有一个叫SQLITE_SEQUENCE的表 &里面存储着用户表中的自动增长字段的信息
SQLITE_SEQUENCE表DDL信息如下
CREATE TABLE SQLITE_SEQUENCE(name TEXT,seq INTEGER);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:82833次
积分:1427
积分:1427
排名:千里之外
原创:64篇
评论:12条
(5)(2)(3)(2)(2)(1)(2)(2)(4)(2)(1)(1)(3)(4)(1)(1)(1)(2)(1)(1)(7)(5)(5)(1)(7)(5)智能手机中基于SQLite的媒体查询功能的研究与实现
查看: 879|
摘要: 在信息化、科技化高度发展的今天,手机正逐步从单一的移动通讯工具向智能化的终端设备发展。与传统手机相比,智能手机除了具备手机的通话功能外,还具有多媒体、个人信息管理、基于无线数据通信的浏览器和电子邮件功 ...
【南京理工大学
硕士学位论文
智能手机中基于SQLite的媒体查询功能的研究与实现
姓名:万俊
申请学位级别:硕士
专业:计算机应用
指导教师:孙亚民
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
在信息化、科技化高度发展的今天,手机正逐步从单一的移动通讯工具向智能化
的终端设备发展,与传统手机相比,智能手机除了具备手机的通话功能外,还具有多
媒体、个人信息管理、基于无线数据通信的浏览器和电子邮件功能等丰富的功能。随
着多媒体功能的日益强大,手机中存储的媒体数据数量也随之不断增长,如何有效管
理膨胀的媒体数据已经成为手机系统开发者的当务之急。本文给出了一种有效管理媒
体数据的解决方法,即在智能手机中植入一个嵌入式数据库SQLite,通过数据库对数
据进行有效地管理,并且设计和实现了媒体查询(Media Finder)模块,由它为上层
应用程序提供媒体数据管理的服务。文章首先研究了新一代智能手机平台的整体架
构、软硬件的结构以及智能手机使用的操作系统Mobilinux,其次分析了常见的Linux
数据库系统,并且根据智能手机开发的特点提出了对嵌入式数据库的需求,根据需求
特点选择了嵌入式数据库SQLite作为Media Finder的底层数据库,随后通过实验对
其性能进行了全面分析。Media Finder的设计和实现是本文的重点,文中介绍了Media
Finder的整体设计结构和模块功能划分,将MediaFinder的结构划分成数据库引擎层、
服务层和应用层,同时对重要模块的具体设计和开发、模块间的通信机制、通信的消
息结构进行了详细描述。
关键词:智能手机、嵌入式数据库、媒体查询、Linux、SQLite
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
With the development of information and science technology,the handset is gradually
from simple communication equipment toward the smart mobile terminal.Compared with
the traditional handset,the smart phone supplies rich functions,such as multimedia,
personal information management,wireless-based browser and E—mail,to the end user
except call function.As the amount of media data supported by the handset quickly grow,
the need for effective media data management emerges as a competitive necessity.Targeted
at solving this problem,a kind of method is presented in the paper.It is using SQlite which
is an embedded database to manage media data effectively,at the same time,Media Finder
designed and implemented in this paper provides services for the applications to manage
and navigate media data.At the beginning,the paper introduces the structure of the
platform and OS Mobilinux of the smart phone,SQLite is chosen as Media Finder:s
database considering characteristics of the smart phone,The design and implementation of
Media Finder is the most importance work in this papen In the architecture,Media Finder
can be dix,ided into engine layeq service layer and application layeL and detailed design
and development of the critical modules,IPC communication mechanism between modules
and the message structure are also presented in the papen
Key words:Smart phone、Embedded database、Media Finder、Linux、SQLite
堡主丝塞塑壁量垫生墨王兰里兰生竺堡竺奎塑堕丝塑堡塞量壅堡
Advanced Hi曲-performance Bus
Application Processor
Application Utility Function
Baseband Processor
Digital Signal Processing
Inter—Processor Communications
Meta.data Aecess Service
Meta-data Communication Layer
Meta·data Catalog Service
Media Finder Application
Meta—data Service Engine
Meta.data Service Framework
Open Database Connectivity
Virtual File System
Execute In Place
增强的高性能总线
应用处理器
应用程序通用接口
基带处理器
数字信号处理器
处理器间通信
元数据访问服务
元数据通信层
元数据分类服务
媒体查询应用程序
元数据服务引擎
元数据服务控制台
开放式数据库互接
虚拟文件系统
本学位论文是我在导师的指导下取得的研究成果,尽我所知,在
本学位论文中,除了加以标注和致谢的部分外,不包含其他人已经发
表或公布过的研究成果,也不包含我为获得任何教育机构的学位或学
历而使用过的材料。与我一同工作的同事对本学位论文做出的贡献均
已在论文中作了明确的说明。
研究生签名: 刍整2却#年‘月,日
学位论文使用授权声明
南京理工大学有权保存本学位沦文的电子和纸质文档,可以借阅
或上网公布本学位论文的全部或部分内容,可以向有关部门或机构送
交并授权其保存、借阅或上网公布本学位论文的全部或部分内容。对
于保密论文,按保密的有关规定和程序处理。
研究生签名:叠丛跏;年6月/日
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
在人们的印象中,手机就是一个移动的通讯工具。但随着生活和办公节奏的不断
加快,手机已经成为现代人不可或缺的工具,人们开始希望手中的手机除了可以完成
一般的通话和通讯操作外,还可以通过不同的应用软件来实现诸如照片拍摄、多媒体
文件播放、商务处理、个人信息管理以及辅助学习等功能。正是消费者的这种需求,
推动了智能手机的发展步伐。
1.1.1智能手机的概念
所谓智能手机是指使用开放式操作系统、第三方可根据操作系统提供的应用编程
接口为手机开发各种扩展应用和提供各种扩展硬件。这种手机除了具备普通手机的通
话功能外,还具备了PDA的大部分功能,特别是多媒体功能、个人信息管理以及基
于无线数据通信的浏览器和电子邮件功能。
业界将是否具有嵌入式操作系统与是否可以支持第三方应用软件安装作为智能
手机与普通手机两大区分点。
从目前智能手机的发展可以发现,手机的功能变得前所未有得丰富。在多媒体功
能方面,具有高保真MP3播放器、Real Player媒体播放器、百万象素照相和摄像、
3D JA、,A游戏等等““;在移动办公方面,具有Word、Excel、Powerpoint、电子邮件、
IE浏览器等应用程序;在个人信息管理方面,具有电子名片、通讯录和日程表等功
能。可以说,现在的智能手机,已经成为了一个集通讯、娱乐、工作为一体的个人信
1.1.2智能手机的操作系统
如同电脑一样,智能手机的丰富功能也需要在操作系统平台上实现。经过数年的
发展,目前智能手机操作系统主要分为四种,即Symbian系列操作系统、Windows
Mobile系列操作系统、Palm操作系统和Linux操作系统。除此之外,还有Hopen和
DOEASY等操作系统。”。
Symbian由摩托罗拉、西门子、诺基亚等几家大型移动通讯设备商共同出资组建
的一个合资公司,专门研发手机操作系统。Symbian操作系统在智能移动终端上拥有
强大的应用程序以及通信能力,这都要归功于它有一个非常健全的核心一一强大的对
象导向系统、企业用标准通信传输协议以及完美的Sun Java语言。在硬件设计上,它
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
可以提供许多不同风格的外型,像使用真实或虚拟的键盘,在软件功能上可以容纳许
多功能,包括和他人互相分享信息、浏览网页、传输和接收电子信件、传真以及个人
生活行程管理等。此外,Symbian操作系统在扩展性方面为制造商预留了多种接口[28]o
Symbian提供三个主要的智能手机平台,分别是适用于单手操作的$60、双手操
作的$80和以笔操作为主UIQ平台,其中$60的应用最多。
Windows Mobile
微软在移动终端操作系统上有三个系列,分别为Pocket PC、Pocket PC Phone
Edition和Smartphone,统称为Windows Mobile,最新推出的Windows Mobile操作系
统底层采用Windows CE.net 4.2内核””。
Windows Mobile的最大优点就是操作为大多数电脑用户所熟悉,功能强大,集
成了用户熟悉的常用软件,如Mobile Outlook和Windows Media Player等,用户能够
通过Outlook收发电子邮件,拥有与PC同步的邮箱、联系人、任务、日历,通过Word、
Excel、PowerPoint等系列办公软件,实现移动办公。
Palm OS是Palm公司的是一种32位的嵌入式操作系统,它的操作界面采用触控
式,差不多所有的控制选项都排列在屏幕上,使用触控笔便可进行所有操作。作为一
套极具开放性的系统,开发商向用户免费提供Palm操作系统的开发工具,允许用户
利用该工具在Palm操作系统的基础上编写、修改相关软件,使支持Palm的应用程序
丰富多彩、应有尽有。
Palm操作系统最明显的优势还在于其本身是一套专门为掌上电脑编写的操作系
统,在编写时充分考虑到了掌上电脑内存容量较小的情况,所以Palm操作系统本身
所占的内存极小。基于Palm操作系统编写的应用程序所占的空间也很小,通常只有
几十KB,基于Palm操作系统的掌上电脑虽然只有几兆内存却可以运行众多的应用程
序⋯。
Linux与其它操作系统相比是个后来者,但Linux凭借其自由、免费、开放源代
码的优势,经过来自互联网、遍布全球的程序员的努力,Linux在手机操作系统市场
中异军突起,尤其是在众多知名厂商宣布支持Linux手机操作系统之后,Linux的发
展不容忽视。“。
Linux与其他操作系统相比,具有二个其它操作系统无法比拟的优势。其一,Linux
具有开放的源代码,能够大大降低手机开发的成本。其二,既满足了手机制造商根据
硕士论文智能手机中基于SQLIte的媒体查询功能的研究与实现
实际情况有针对性地开发自己的Linux手机操作系统的要求,又吸引了众多软件开发
商对应用软件的开发,丰富了第三方应用软件。
1.2项目背景
正因为这些移动终端操作系统被智能手机所使用,手机的功能变得日益强大,再
加上手机自身内存不断地扩大及操作系统对外接SD/MMC存储卡的支持,手机支持
的数据类型在不断地增加,存储的数据数量也在随之不断地增多。为了能够使用户有
效的管理、更新和使用手机中各种类型的数据,如音频、视频、图片等,智能手机系
统开发者在其下一代手机中植入了一个嵌入式数据库,并提供从数据库引擎层、中间
服务层、到面向用户的应用层,三层的完整解决方案和实现。服务进程作为Daemon
运行在后台,负责对数据库进行实时的更新和操作,上层应用通过服务进程实现对数
据访问、管理和操作。
本人参与了智能手机中媒体查询功能的研发工作,主要从事的工作包括Media
Finder软件模块的整体架构设计,Meta.data Service AUF模块、Meta—data Access
Service模块和Meta.dataCommunicationLayer模块的设计和开发,与其它模块间的通
信工作,以及为上层应用程序提供标准的接口等。此项目旨在实现嵌入式数据库
SQLite在智能手机中的数据管理功能,其初始版本实现对音乐、铃声、播放列表等媒
体数据的访问、更新、排序、查询等基本操作。
1.3论文研究的内容
论文研究的内容包括:(1)从软件结构和硬件构架上对新一代的智能手机平台进
行了研究;(2)针对智能手机硬件和软件的特点,分析了手机对嵌入式数据库的需求,
根据需求特点选择了SQLite作为Media Finder的底层数据库;(3)研究了嵌入式数
据库SQLite的特点和结构,并且通过实验对其性能进行了分析:(4)为了实现嵌入
式数据库SQLite在智能手机中的应用,设计了一套完整的解决方案一一MediaFinder
软件模块,制定了MediaFinder中各模块间的通信机制和消息的格式,并给出了其中
各个重要功能模块的结构设计和实现方法;(5)构建了Media Finder的测试环境,检
测了MediaFinder的功能实现情况,并针对初始版本完成的功能提出了下一个版本的
改进思想。
1.4论文的结构
论文共分为五章,以MediaFinder模块的整体架构设计为中心,对手机平台的软
件、硬件结构以及嵌入式数据库SQLite性能进行了研究,设计并实现了基于scM—
A11平台和SQLite数据库的MediaFinder软件模块。具体各章节的内容如下:
第一章:绪论叙述课题的背景、来源、论文研究的内容和全文的组织结构。
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
第二章:智能手机平台SCM.A11作为Media Finder模块运行的手机平台,本
章介绍了这个新一代智能手机平台的软件和硬件结构,并对项目涉及的相应模块进行
了详细地研究。
第三章:嵌入式数据库SQLite本章首先研究了在Linux上常用的数据库系统,
通过分析手机系统对数据库的需求特点,选用了嵌入式数据库SOLite,并对其的结
构、特点和开发技术进行了详细研究,最后通过两组实验数据分析了SQLite的性能。
第四章:Media Finder的设计和实现本章首先给出Media Finder模块的整体构架
设计,对其中的各个功能模块进行了结构设计和功能定义,并给出各个模块间的通信
机制和消息结构,随后详细阐述了MediaFinder中各个重要模块的开发和实现,最后
通过构建的测试环境对实现的Media Finder进行了集成测试。
第五章:结束语本章总结了论文提出的设计思想和所完成的工作,并对下~步
的研发提出了一些改进的想法。
论文的重点在第三章和第四章。第三章主要研究了嵌入式数据库SQLite,通过自
身耗时测试和对比实验对其性能进行了分析。第四章主要实现了基于SQLite的Media
Finder软件模块,分别从整体架构、功能模块两方面阐述了Media Finder设计和实现。
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
2智能手机平台
SCM.A1l作为项目研发所使用的硬件平台和软件平台,本章描述了SCM—A11
平台的硬件结构和主要模块的功能,对SCM—A11软件平台的整体架构及硬件和软件
间的交互进行了研究,并且对项目涉及平台相关软硬件部分进行了介绍。
2.1平台的硬件架构
2.1.1概述
和之前硬件平台相比,最新的SCM.A11平台能够提供更佳的性能。因为
SCM.A11平台采用了一个非常简洁的单片双核架构,它将AP(应用处理器)和BP
(基带处理器)集成到了一个芯片架构中,这样两个处理器内核就能够最大限度地实
现系统资源共享,省去了多处理器核之间的通信开销“”。这种设计不但能提高处理器
性能,而且降低了产品的成本,所占用电路板的面积也少于使用多个单芯片处理器。
图2.1.1.1显示了SCM—A11的单片双核构架。
SCM—A11的基带处理、应用处理分别采用一个StarCore SCl40 DSP(数字信号
处理)处理器和一个ARMll36应用处理器来实现。208Eqz的StarCore SCl40 DSP
内核处理2.5G、2.75G及3G(W-CDMA、UMTS)标准的所有信令协议层L1、L2及
L3,以及高级音频功能;400MHz的ARMll36内核则提供完全的应用处理器的功能。
Linux操作系统
应用处理器(ARMll)
信令协议栈
基带信号处理
DSP实时操作系统
基带处理器(StarCore SCl40)
_键。盘●n。。翻●_1'-电。源厂●管。理~矿⋯r‘。外。。。。_部。。●'。连。。。。。接。。。。一RF芯片
图2.1.1.1 SCM.A11的单片双核架构
程序代码和数据存储在不连续的存储区域中,存储系统采用NOR(或非闪存)
+NAND(与非闪存)+RAM(随机存储器)架构。NOR使用的是“XIP(本地执行)”
技术,直接由NOR快速在本地执行代码而无需RAM开销:而NANI)则是采用“Code
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
Shadowing(代码遮蔽)”技术,其软硬件架构均为新型架构,程序代码存储在NAND
闪存中,但NAND闪存本身无法进行代码地执行,需要使用RAM作为工作存储区
来执行代码””。由于NAND闪存的存储密度远大于NOR闪存,而且NAND闪存的
读写速度远高于NOR闪存,所以SCM.All平台选用非易失性的NAND闪存作为内部
存储器来存储程序代码,同时也支持NOR闪存。SD或者DDR SDRAM作为外部存
储器供代码的执行和数据的存储,同时也支持PSRAM存储器。因为在ARMll处理
器和SCl40处理器内核中都固化了高速缓存,两个处理器对外部存储器的访问就不
会十分的频繁了,所以在两个处理器内核间共享外部存储器的访问接口,这点和芯片
周围的多个设备轮流使用总线机制类似。
SCM.A1 1平台支持RF Micro Devices公司的Prime射频芯片和Freescale公司的
TransAAM射频芯片,这两种芯片都能支持Class 12 GPRS和EDGE。
2.1.2 SCM.11的硬件结构
图2.1.2.1给出了SCM一11的硬件构架的示意图,整个构架以应用处理器ARMll
和基带处理器SCl40为中心,他们控制周围模块的正常运行。主要的模块包括AGPS
模块、GPRS模块、蓝牙模块、WLAN模块、RF模块、摄像头、显示屏、键盘、电
池模块、NAND闪存、NOR闪存、DDR内存、SD卡模块、SIM卡模块等。
图2.1.2.1 SCM.AI 1平台的硬件结构示意图
2.1.3项目涉及的主要硬件模块功能
MediaFinder软件模块主要涉及SCM.A11硬件平台中的基带/应用处理器、外部
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
存储器、显示这三个主要的硬件模块,下面对这三个主要模块进行详细的研究。
(1)基带/应用处理器
SCM.A11平台的基带和应用处理器模块包含四个主要的部分。
手机调制解调基带处理器(BP)采用的是一个Starcore SCl40 DSP处理器,运行
在P2002R平台上。基带处理器主要负责处理Ll、L2、L3信令协议层的GsM呼叫处
理编码,以及高级音频功能。P2002R平台同时也包含了LI高速缓存(其中16K为指
令缓存,16K为数据缓存),321(的M1随机存储器,512K的M1只读存储器,一个内
存管理单元,嵌入式片上仿真系统,中断控制器,以及AHB和口总线接口。BP模
块具有16个独立的外设。一个4X4 AHB总线的交叉开关使得数据在BP模块中传递
更加得灵活。在P2002R平台上,Starcore SCl40 DSP在供电电压为1.2V时最大工作
频率为156MHz,而在1.6V的供电电压情况下,最大的工作频率可达208Ml-lz“”。
应用处理器采用的是一片AR/v11136处理器,它是Freescale ARMll平台的一部
分,负责处理应用程序和用户界面程序。AI}Mll处理器在1.2V工作电压下,其最大
工作频率为399MHz,而在1.6V的工作电压下,最大的工作频率可达532MHz““。
外部存储器由FLASH和SDRAM组成的,SCl40 BP处理器和ARMll AP处理
器共享一个内存访问通道去访问外部存储器,而这个内存访问通道是与AR/v111应用
内核共享同一个接口的。
在一条设备总线上连接着多个内部设备,这些内部设备被AP和BP所共享,AP
和BP根据需求去使用共享设备。共享设备包括:增强L1定时器、MQSPI,SSl2,SD
卡主控制器1、SD卡主控制器2、CSPII、CSPl2、UART3、USB—OTG控制器、4条
锁相回路、CRM COM、CRM AP、SIM、IOMUX、HAC和ILM。
(2)外部存储器
外部存储器由64M到256M byte大小NAND FLASH和48M到64M byte大小的
低耗SDRAM构成,NAND FLASH和SDRAM具体大小取决于最终不同的产品。
NAND FLASH用于代码的存储和固定数据的存储,.代码则在SDRAM中执行,在需
要执行时,系统会从NAND FLASH中拷贝代码到SDRAM中。
ARMll AP只有在内部高速缓存被占满或者需要储存数据时才会访问外部存储
器,同样SCl40BP也只有在需要存储数据时才对外部存储器进行访问。
主屏采用了一片QVGA 18bpp彩色TFT显示屏面板,分辨率可达320X 240,但
它没有独立的显示控制器和缓存”“,而是由SCM.A1I通过RGB接口对其直接驱动。
辅屏是一片96×80分辨率的CSTN屏,由SCM.A11通过串口对其直接驱动。
——』生兰!鱼茎塑!!三垫!董三!里兰堕塑堡竺堑塑生墼塑婴壅兰塞堡
2.2平台的软件架构
2.2.1概述
正如前面的章节描述的,所有的应用程序都运行在ARMll处理器上的,它既要
负责通过显示器、键盘等与用户进行交互,也负责处理通过USB、UART、SDIO等
接口与外部的连接。
SCM-All的软件结构是依赖于Linux操作系统的,Linux操作系统提供访问硬件
的所有必要驱动程序,以及一整套本地库文件。SCM.All的软件结构如图2.2.1.1
图2.2 1 1 SCM—A11平台的软件结构
SCM—A11平台的软件结构可以分为三层:
·应用层:这层包含了所有基于QT的应用程序、QT框架、应用管理程序。与
用户的交互也在这层里处理。
·服务层:这层为上层应用程序提供服务,它包含了TAPI、NAPI、引擎、DB、
浏览器等中间件,这些中间件提供功能性的API给上层应用程序所使用。上层的应用
程序通过他们与底层的硬件和操作系统交互,这样可以屏蔽上层应用程序的变化。
·内核和驱动层:Linux操作系统、内核、驱动、以及支持的文件系统等都在这
Media Finder模块正是在这个平台上开发的,我们有必要对软件平台的三层结构
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
进行详细的研究,在2.2.2节、2.2.3节、2.2.4节中分别对内核和驱动层、服务层、
应用层的主要模块在功能上进行了分析。
2.2.2内核和驱动层
内核和驱动层,也称为系统服务层,包含了必要的核心系统服务来支持应用层,
包括系统的库(例如,标准c库)、系统的后台程序、系统应用程序(例如,/sbirdinit)、
设备驱动程序和内核。它包含Liunx中几乎全部的组件,同时加入了一些自己的组件。
(一)Linux操作系统
运行在ARMll应用处理器上的操作系统使用的是嵌入式操作系统厂商
MontaVista最新推出的Mobilinux 4.0,Mobilinux是一款基于Linux的手机用操作系
统,采用了Linux 2.6核心,并专门针对手机应用及无线数据服务进行了特别优化,
提供了必要的电源管理功能,实时的硬件监控功能以及小于1秒的快速启动功能。
Mobilinux构建在MontaVista Linux第四代平台上,采用了开放性架构设计,以
Mobilinux 4.0为基础的Mobilinux开放性架构给使手机在设计上有更大的灵活性和
选择,更好地满足定制需求,同时允许设计和服务上的差异。由于Mobilinux基于的
Linux操作系统,因此Mobilinux拥有极大的扩展空间,因为用户可以很轻易得到相
关的扩展应用“⋯。
(二)文件系统
VFS(虚拟文件系统)层屏蔽了不同的逻辑文件系统的差异,为上层提供了统一
的接口,而逻辑文件系统通过设备驱动层去管理存储设备中的数据”“。
图2.2.2.1中显示了文件系统的框架结构。虽然Linux OS支持很多标准的文件
系统,但SCM—A11平台中只支持与物理存储媒质相关的文件系统,这些文件系统为:
·CRAMFS:CRAMFS中的数据已被压缩,属于只读性文件系统,用于存储配
置文件和语言包,应用程序无法对其进行修改。
·YAFFS:YAFFS类似于JFFS/JFFS2,是专门为NAND闪存设计的嵌入式文件
系统,适用于大容量的存储设备。它是日志结构的文件系统,提供了损耗平衡和掉电
保护,可以有效地避免意外掉电对文件系统一致性和完整性的影响。
·VFAT:一种扩展的FAT文件系统。
·RAMFS:利用VFS自身结构而形成的内存文件系统,用于管理内存中应用程
序和系统运行时产生的临时文件。RAMFS没有自己的文件存储结构,它的文件存储
于页面缓存中,目录结构由dentry链表本身描述,文件则由VFS的inode结构本身描
述。一旦出现掉电等特殊情况,保存在RAMFS中的修改数据将全部丢失。
·SYSFS:Linux 2.6的内核引入了SYSFS文件系统,它是一种基于内存的文
件系统,SYSFS提供了一种内核数据结构,它们的属性以及属性与数据结构的联系
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
开放为用户态的方式,它与kobject子系统紧密地结合在一起,因此内核开发者不需
要直接使用它,而是内核的各个子系统使用它。“。用户要想使用SYSFS读取和设置
内核参数,仅需装载SYSFS就可以通过文件操作应用来读取和设置内核。用户空间[卫[卫[卫
内核空间Linux虚拟文件系统层
[一CLiRnuAx逻M辑F文S件]系回统层_订围困陬面司厂司Li一雨F]
设备驱动层
l 字符设备驱动块设备驱动I页面缓存/缓冲缓存l
物理存储媒质
眄而习J NAND闪存I厂_面『]卜吾司
图2.2.2.1文件系统的框架结构
·SQUASH:它是CRAMFS文件系统的下一代版本。在CRAMFS文件系统进
行的大部分开发都可以在SQUASH文件系统中进行。
·JFFS2:这是一种新的文件系统,它允许在闪存中直接进行修改,在掉电时会
自动保存其中的数据。JFFS2的数据压缩方式和CRAMFS一样,其数据可存放在全
部的闪存区域中,数据的写入和删除分布在很大一片区域中以防止同样的块会被重复
·NFS:NFS是一个网络文件系统,只在系统开发过程有效。它使目标设备从网
路上加载相应的文件系统。
(三)进程间通信
IPC多路复用器属于一个中间通信层,位于应用处理器(AP)和基带处理器(BP)
之间。对于IPC的访问,MUX提供了具有优先级别的访问机制,一个应用程序通过
MUX与相应的BP部分通信,同时MUX也负责通信双方的缓存分配和数据流控制。
2.2.3服务层
服务层,也称为应用服务层,所含的组件为上层应用程序提供功能接121,主要由
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
以下一些组件组成:
·屏蔽平台硬件和操作系统的中间件,如TAPI,DB等;
·图形化的用户接口,应用管理,应用程序显示的界面组件
(一)应用管理
应用管理程序负责对前端的应用程序进行集中地管理,统一手机中不同应用程序
的界面风格,使其保持一致。它将所有的应用程序分为几大类,并在它的菜单中以一
定层次结构显示给用户,同时,它提供机制实现多个程序能够同时平稳地运行,以及
保证不同程序间能够正常通信和交互。
根据系统的性能,应用管理程序既能作为一个独立的程序单独运行,也能够作为
其它程序的一部分实现其功能。它在操作系统启动时自动运行,能对其它应用程序进
行运行、中止、激活等操作。它通过进程问通信方式与其它应用程序通信,使用消息
通道发送控制命令和接受应用程序的请求。
应用管理程序也支持应用程序的安装、执行开机和关机程序、支持大容量储存模
式和其它系统服务功能。图2.2.3.1显示了应用管理程序基本的结构。
图2.2.3.1应用管理程序的结构不意图
这里有两种类型的应用程序:本机应用程序和Java应用程序。应用管理程序对
本机应用程序直接控制,对Java应用程序则通过JAM(Java应用管理程序)进行控
应用管理程序通过使用系统功能调用启动和中止本机应用程序和Java应用程序,
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
同时通过QT的通信机制,给应用程序发送消息、通知关机事件、在不同应用程序间
交换信息。当应用管理程序得到消息去激活某个应用时,它会通过QT消息告诉服务
器,服务器将相应的应用调用至上层运行。.
(二)QT服务和用户界面
所有应用程序的用户界面都是基于QT的嵌入式用户图形界面开发包开发的。QT
是由Trolltech公司推出的一个多平台的C++图形用户界面应用程序框架。它提供给
应用程序开发者建立艺术级的图形用户界面所需的所用功能。QT是完全面向对象的,
具有易扩展性,并且允许真正地组件编程。QT/嵌入式是QT为资源紧张的嵌入式系
统开发的一个版本,它延续了QT在X上的强大功能,在底层摒弃了x库,仅采用
frame buffer(帧缓冲)作为底层图形接口,同时,将外部输入设备抽象为键盘和鼠标
的输入事件,底层接口支持键盘、GPM鼠标、触摸屏以及用户自定义的设备等。
应用程序使用的框架结构如图2.2.3.2所示。
(电话,日历,浏览器,多媒体等)
理程序组件
应用程序引擎
‘ i i i 、
Qt服务QtGUI
(套接字,日期和时间,事件处理) (窗口管理,图形组件)
服务层(TAPl,NAPI,等)
Linux OS/设备驱动
图2.2,3,2应用程序的框架图
从图2.2.3.2中可以看到QT服务和QTGUI(用户图形界面)模块在AP软件
结构中处的位置,以及它们与其它软件模块间的交互关系。GUI模块提供用户界面的
整体风格,为上层应用程序提供固定的接口,对用户使用的不同语言给出对应的消息,
同时对用户的操作给出相应的声音和视觉反馈。
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
2.2.4应用层
在这层,本文主要关注的是多媒体应用,它包括了媒体播放器、照相机(静态照
片和动态视频)、媒体查询器(MediaFinderApp)、图片编辑器和录音机。如图2.2.4.1
所示,这些组件被分为了四个功能块:导航、播放、编辑、捕获。
图2 2 4.I多媒体应用的框架图
媒体播放器是一个独立的应用程序,它使用AM提供的界面框架,调用服务层提
供的音频、视频引擎实现媒体的播放功能。
媒体查询器是Media Finder的上层应用程序,它通过Media Finder为用户提供多
媒体文件的管理服务,其服务包括对媒体文件、播放列表的管理、排序、查找、导航
等,通过数据库SQLite实现对多媒体文件的信息进行存储和管理。Media Finder模块
的设计和实现是本文的重点。
图片编辑器作为多媒体应用的一部分,提供了对照片、图片的编辑功能。
实现捕获功能的应用程序包括照相机和录音机两个应用程序,通过他们实现对静
态图像、动态视频和音频的采集。
2.3本章小结
.本章介绍了Media Finder所使用的新一代平台SCM.A1 1,从硬件结构和软件结构
两个方面对SCM.A1 l进行了研究,同时对项目涉及平台的软件和硬件模块进行了较
为详细的分析,其中,与MediaFinder项目相关的主要硬件模块包括基带/应用处理
器、外部存储器、显示屏等,与其相关的主要软件模块包括了Mobilinux、文件系统、
进程间通信、应用管理和QT服务与用户界面等。
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
3嵌入式数据库SQLite
随着手机向智能化发展,手机用户对数据的处理和管理需求也随之不断提高,智
能手机和数据库系统的紧密结合将成为智能手机发展的一个重要方向。本章首先就
Linux操作系统下的常见数据库系统做出分析,然后给出手机软件开发中对数据库的
需求特点,并基于此对嵌入式数据库SQLite的体系结构和开发技术进行了论述,最后
通过实验数据,对SQLite进行了性能分析。
3.1 Linux下常见的数据库系统
基于Linux平台的数据库非常多,大型的商用数据库有Oracle、Sybase、Informix、
IBM DB2等,中小型数据库的更是不胜枚举,其中比较常用的主要有PostgreSQL、
MySQL、mSQL(mini 8QL)、Berkeley DB和SQLite等。
PostgreSQL是世界上最优秀的开放源码的数据库之一,不需要任何版权费用和购
买费。因此,它是许多Linux发行版本的首选,例如,Red Hat Linux、Turbo Linux
都预装了PostgreSQL。PostgreSQL兼容性很强,如果用户以前使用的版本是与SQL92
兼容的,那么移植PostgreSQL将非常简单和快捷。
MySQL是一种多用户、多进程的SQL数据库服务器。它是包括一个服务器守护
进程(mysqld)、客户端程序和不同种类库的Client/Server实现工具。它比较适合小而
简单的数据库,对复杂的操作要求支持不是很好。MySQL的特许政策是,如果是普
通的最终用户,使用MySQL不需要付费:但如果是直接或间接地出售MySQL的服
务程序或相关产品,或者是在一些客户端维护MySQL Server并收取费用,或者是在
软件发行版中包括MySQL就需要获得相关的许可。
mSQL是一个单用户数据库管理系统,由于它短小精悍,用其开发的应用系统特
别受到互联网用户青睐。mSQL并非是完全的自由软件,只有在大学中使用,或者是
为了学术研究与慈善等非营利性目的,才能免费得到其使用权,否则就必须付费注册
才能得到正式的版权。
Berkeley DB是一个开放源代码的内嵌式数据库管理系统,能够为应用程序提供
高性能的数据管理服务””。程序员只需要调用~些简单的API就可以完成对数据的访
问和管理。与常用的数据库管理系统(如MySQL和Oracle等)有所不同,在BerkeleyDB
中并没有数据库服务器的概念⋯3。应用程序不需要事先同数据库服务建立起网络连
接,而是直接通过内嵌在程序中的Berkeley DB函数库自身来完成对数据的保存、查
询、修改和删除等操作o”。
SQLite支持绝大多数的标准SQL92语句,采用单文件存放数据库,速度也优于
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
MySQL等其它数据库,支持最大可达2T的数据库。在操作语句上也更类似于关系
型数据库的产品的使用,非常方便。SQLite的版权允许无任何限制,包括商业性的
3.2手机软件开发对数据库的需求特点
手机平台的硬件结构决定了手机软件的开发环境,同时也决定了其对数据库的需
求有如下特点:
·体积小巧
目前智能手机中的存储器一般为64M大小,受其存储器的限制,手机系统对于数
据库自身的体积与程序运行时所占用的内存都有一定的空间限制,所以嵌入手机使用
的数据库应该体积小巧。
·功能完善
手机中的应用程序越来越丰富,应用需求决定了在其运行中需要有一个大小适中
且功能齐备的数据库来实现对数据的管理。对开发人员来说,要求采用的数据库系统
提供完备开发的文档,而且易于开发。
·源码开放
作为产品的开发,开源的代码不仅可以减少产品的生产成本,更重要的是为产品
的完善维护和稳定运行都提供了的解决方法。
上面介绍的数据库技术中,Oracle、Sybase、Informix、IBM DB2等虽然功能强大,
但是其系统体积过于庞大,而且要求付费使用,所以仅适用于作为大型商业数据库。
MySQL由于在保持中等体积的情况下提供了较为适用的功能,所以已经成为中小规
模数据库应用的首选,但对于嵌入式开发来说空间占用仍然太大,并且对商业应用需
要收费。mSQL是一种简化的SQL数据库,短小精悍,开发方便,但mSQL不是完
全的开源””,而且有版权限制。
余下的开放源码数据库中,PostgreSQL是Linux下比较完善的开源SQL数据库,但
其体积比较庞大,不适合目前的智能手机系统。BerkeleyDB作为一款健壮的、高速
的工业级开放源代码的嵌入式数据库管理系统,其速度快,可靠性高,适合在手机系
统中使用,但Berkeley DB不是关系型数据库,不能应用标准的SQL语句对数据库操
作,而且BerkeleyDB虽然是开源的产品,但对某些条件下的商业性应用,却不是免
费的,而且价格颇为昂贵”⋯。从3.6节的对比实验数据可以看出,BerkeleyDB的性能
也略逊于SQLite。
相比前面的数据库,SQLite简单易用,访问速度快,同时提供了丰富的数据库接
1:3,且提供了完善的功能,它小型、快速和最小化管理的设计思想使得SQLite使用和
管理十分的简便““。在加上其完全的开放源码,且无任何版权的限制,所以在项目中
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
选择了SQLite作为智能手机的数据库系统。
3.3 SQLite概述
SQLite是2000年开发出来的一种小型嵌入式数据库。它是一个小型的C语言链
接库,这个链接库本身就完全包含数据库引擎的功能,可以方便地运用于嵌入式系统
中。SQLite提供了对SQL92的大多数支持,支持多表、索引、事务、视图和触发等
一系列用户接口及驱动。简单易用,速度也相当得快,同时提供了丰富的数据库接口。
这个库具有很强的内聚性,通过不至1J25000行的ANSI C代码实现,而且它的源代
码完全开放,可以自由地应用于任何领域,甚至包括商业应用。
SQLite具有以下特性:
·事务操作是原子、一致、独立、并且持久的(ACID),即使在系统崩溃和电源故
·实现了绝大多数SQL92标准;
·零配置一一不需要安装和管理配置;
·储存在单一磁盘文件中的一个完整的数据库;
·数据库文件可以在不同字节顺序的机器间自由共享:
·存储量大,支持数据库大小至2TB;
·字符串和BLOB类型的大小只受限于可用内存:
·代码小巧:完整配置的少于250KB,忽略一些可选特性的少于150KB;
·在大多数常见操作上比流行的客户/N务器数据库引擎更快;
·简单易用的API;
·具有良好注释的源代码,95%经过测试;
·独立,没有外部依赖;
·代码完全开放,可以免费用于任何用途,包括商业目的“⋯。
3.4 SQLite的体系结构
SQLite有一个简单、标准化的设计。它可以分成10个主要的子系统,如图3.4.1
所示,其中有一些相当接近于关系型数据库管理。
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
图3.4.1 SQLite的体系结构
SQLite链接库的大部分接口的实现函数都能在main.C,legacy.c和vdbeapi.c源文
件中找到,为了避免和其它程序发生冲突,接口函数都以sqlite3为前缀。
在SQL编译器中包含了标记处理器、分析器和代码生成器。标记处理器对从接
口传入的字符语句进行解析,将解析出的标记符号一个~个传给分析器,分析器根据
这些标记符号得到分析树,在分析器完成工作后调用代码生成器,由代码生成器产生
相应分析树的虚拟机器代码。SQLite有自己的高度优化的分析器和生成器,它可以
快速的生产出高效率的代码,而且它的新颖设计对内存溢出有着特别的抵抗力。
由代码生成器生成的虚拟机器程序在虚拟机中执行。为了实现对多个数据库文件
进行操作,虚拟机实现了一个虚拟数据库引擎(VDBE),并且使用一个堆栈作为中间
往下是基于Knuth经过优化的B树,数据库中的每张表和索引都有自己独立的B
树,利用B树数据库可以运行在可调整的页面高速缓存(Page Cache)上,这有助于将
对磁盘的查找次数减到最少。
B树的下面就是页面高速缓存,它作用在OS的抽象层之上,这样的安排有助于
数据库的移动。
体系结构的核心是虚拟数据库引擎(VDBE)。VDBE完成与数据操作相关的全部操
作,并且还是应用和存储之间信息进行交换的中间单元。从各个方面来看,它都是
SQLite的核心。在SQL语句被分折之后,VDBE开始起作用。代码生成器将分析树
翻译成一个袖珍程序,随后这些袖珍程序又被组合成用VDBE的虚拟机器语言表示
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
的一系列指令。如此往复,VDBE执行每一条指令,最终完成SQL语句指定的查询
VDBE的机器语言由围绕于数据库管3里128个操作码(opcode)组成,对于打开表、
查询索引、存储和删除记录和很多其它数据库操作都有对应的操作码。在VDBE里的
每条指令由一个操作码(opcode)和三个操作数(operand)组成。一些指令使用全部三个
操作数:也有些可能一个也未使用,这完全取决于指令的性质。例如,Open指令用
于打开一个表的指针,使用了全部三个操作数,第一个操作数包含指针的ID号,第二
个操作数指出表的根位置(或者表的首页位置), 而第三个操作数则是表的名字:对
于Rollback指令,则不需要操作数,为了进行一次Rollback,VDBE仅需知道的是否要
做Rollback⋯】。
3.5 SQLite开发技术
SQLite的API极其易于使用,对于数据库操作的基本功能,如建立表格、查询、
修改、插入、删除、排序等,只需要三个用来执行SQL和获得数据的函数。此外它
还是可以扩展的,允许程序员自定义函数,然后以Callback(回调)的形式传递进去。
使用C语言APl只需要三步:首先,要提供文件和访问模式用来调用sqlite3_open()
连接数据库,其参数有两个,一个是需要打开的数据库文件名(UTF一8格式),另一
个参数用于返回数据库句柄。然后,提供一个Callback函数,SQLite通过执行Callback
函数返回从数据库得到的结果。最后,调用sqlite3_exec0执行,将SQL查询语句和
Callback函数的指针作为函数参数传入,其它三个参数分别是已经打开的数据库句柄、
Callback函数的参数和错误信息。如果需要与数据库断开连接可以调用函数
sqlite3 close 0,它的唯~参数就是数据库句柄。
当然,除了上述的三个API函数外,SQLite还提供丰富的API函数,API的具体定
义可以在SQLiteN站上获得。
3.6 SQLite的性能分析
为了能准确得到SQLite的性能数据,本节设计了两组测试实验。第一组实验测
试了SQLite数据库文件分别位于手机内存和手机外插MMC卡中时,进行常规操作
所耗费的时间;第二组实验是SQLite和Berkeley DB的性能对比实验,对数据库常
规操作所耗费的时间、内存使用这两个方面进行了测试。
3.6.1 SQLite常规操作耗时实验
智能手机拥有两部分的存储空间:内部存储器和外插MMC卡,MediaFinder对
数据库文件的设计思想是,在内部存储器和MMC卡中分别创建一个数据库文件来管
理其对应存储空间中的数据。在这个实验中,就有必要对内部存储器、MMC卡中存
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
储的数据库文件分别进行常规操作的耗时测试。
测试的SQL操作和流程如下:
对内部存储器:create database/diska/test/media.db;
对外插MMC卡:create database/mmc/mmcal/test/media.db
(2)创建表,用于存储音频文件的信息
create table audio_flash(Artist VARCHAR(30),AlbumTitle VARCHAR(30),
SongTitle w汛CHAR(30),Genre VARCHAR0),Composer VARCHAR(30),Year
INTEGER,TrackNumber INTEGER,Label VARCHAR(30),Uri VARCHAR(256),
ThumbnailURL VARCHAR(256),TimeCreated TIMESTAMP,LastAccessTime
TIMESTAMP,TimesViewed INTEGER,Preload INTEGER)
(3)插入实体的原始数据,插入的数据数目分别为100组、200组、300组、400
insert into audio—flash(Artist,AlbumTitle,SongTitle,Genre,Composer,Year,
TrackNumber,Label,Uri,ThumbnailURL,TimesViewed,Preload)values(’Phil Collins’,
’Face Value。,’I Missed Again’,⋯4,。myComposer’,1 986,1 5,’EMI’,’D:kmusic\I Missed
Again-Phil Collins.rap3’,’myThumbnailURL。,1 0,0)
(4)从DB中选择所有的艺术家名字,并且按艺术家名字排序
select distinct Artist from audio—flash order by Artist
(5)从DB中选择所有的歌曲专辑名称,并且按歌曲专辑名称排序
select distinct AlbumTitle from audio—flash order by AlbttmTitle
(6)从DB中选择所有的歌曲名称,并且按歌曲名称排序
select distinct SongTitle from audio_flash order by SongTitle
(7)从DB中选择艺术家Bon Jovi的所有专辑名称,并且按专辑名称排序
select distinct AlbumTitle from audio—flash where Artist=’Bon Jovi’order by
AlbumTitle
(8)从DB中选择艺术家是Bon Jovi,专辑名称是Slippery When Wet的所有歌曲,
并且按歌曲序号排序
select Artist,AlbumTitle,SongTitle,Genre,Composer,Year,TrackNumber,Label,
Uri,ThtunbnailURL,TimeCreated,LastAccessTime,TimesViewed,Preload from
audio flash where Artist=’Bon Jovi’and AlbumTitle=’Slippery When Wet’order by
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
1lackNumber
表3.6.1.1显示了DB存储路径为内部存储器的测试结果,数据的单位为毫秒。
表3.6.1.1 DB存储路径为内部存储器的实验结果
DB储存路径:DiskA 单位:毫秒
l操作/实体数100 200 300 400
l创建DB 69 70 76 69
创建表698 647 651 646
插入实体的原始数据83 5267
查询所有的艺术家名字108 131 164 193
查询所有的歌曲专辑名称77 104 135 166
查询所有的歌曲名称135 252 379 585
查询艺术家Bon Jovi的所有专辑名称24 37 5l 64
查询艺术家是Bon Jovi,专辑名称是Slippery 31 42 52 63
When Wet的所有歌曲
图3.6.1.1和图3.6.1.2是根据表3.6.1.1绘制出的折线图,显示了DB存储
路径为内部存储器时,SQLite进行创建和查询操作的性能情况。
图3.6.1.1 DB存储路径为内部存储器的创建性能折线图
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
图3.6.1.2 DB存储路径为内部存储器的查询性能折线图
同样,表3.6.1.2显示了DB存储路径为外插MMC卡的测试结果,数据的单位
表3.6.1.2 DB存储路径为MMC卡的实验结果
DB储存路径:MMC 单位:毫秒
操作/实体数100 200 300 400
创建DB 138 134 137 140
创建表643 614 660 651
插入实体的原始数据92 5273
查询所有的艺术家名字108 130 164 194
查询所有的歌曲专辑名称78 105 135 166
查询所有的歌曲名称136 252 381 505
查询艺术家Bon Jovi的所有专辑名称23 37 50 64
查询艺术家是Bon Jovi,专辑名称是Slippery
31 42 52 63
When Wet的所有歌曲
图3.6.1.3和图3.6.1.4是根据表3.6.1.2绘制出的折线图,显示了DB存
储路径为外插MMC卡时,SQLite进行创建和查询操作的性能情况。
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
图3.6.1.3 DB存储路径为MMC卡的创建性能折线图
图3.6.1.4 DB存储路径为MMC卡的查询性能折线图
从两组实验的数据分析,除了创建DB操作外,DB的存储路径对数据库操作的
性能影响很小,而在内部存储器中进行创建操作的速度略高于在MMC卡中进行创建
操作的速度。
3.6.2 SQLite和Berkeley DB的性能对比实验
SQLite和Berkeley DB都是优秀的嵌入式数据库管理系统,其具有源码开放、无
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
需安装、体积小巧、存储数据量大、执行速度快、使用简单等特点,可以方便的应用
在手机、PDA、车载设备等嵌入式系统中。所以这个实验的目的就是将SQLite和
Berkeley DB在性能上进行对比。
实验设计为两组,分别调用数据库提供的不同API函数,测试平台为Linux PC
机。第一组实验完成一组操作:Open(打开DB),Add(在DB中加入一条记录),
Update(根据U1D更新一条记录),Get(根据U1D查询一条存在的记录),Remove
(根据UID删除一条存在的记录),Close(关闭DB);第二组实验只是进行查询操
作:GetOnly(根据不同UID查询存在的记录)。
表3.6.2.1和表3.6.2.2分别给出为BerkeleyDB和SQLite详细的测试数据结果,
测试的次数为10次,数据单位为微妙。
表3.6.2.1 Berkeley DB数据库的测试结果
Berkeley DB 单位:微秒
No Open Add Update Get Remove Close GetOnly
1 799 90 4
3 829 98 9
4 262l 97 518l 89 3692
6 781 40 7
8 98 l 3800
Average 7.2 6.3 .6 3695.9
表3.6.2 2 SQLite数据库的测试结果
SQLite 单位:微秒
NO Open Add Update Get Remove Close GetOnly
520 472l 2 53 797
7 524 8 220I 55 795
Average 520.6 0.2 759.4 .4 786.3
根据Berkeley DB和SQLite各自的测试数据结果,表3.6.2.3对两者的测试数据
进行了综合对比。
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
表3.6.2.3BerkeleyDBVS SQLite
DB、OP Open Add Update Get Remove Close GetOnly
SOLite 52l 9
214.40% 2.31% 48.92% 326.35% 65.31% 50.00% 370.23%
通过分析以上两组对比实验的数据结果,我们看出,对于查询操作,特别是对数
据库的大量查询操作,SQLite的速度明显的高于Berkeley DB,对于其它常规的数据
库操作,SQLite也略显优势。同时,SQLite打开和关闭DB所消耗的时间也十分得短。
表3.6.2.4给出了在对Berkeley DB和SQLite数据库测试过程中栈和堆的使用数
据,这些数据通过工具memusage得到,memusage给出了heap total(堆的总值)、heap
peak(堆的高峰值)和stack peak(栈的高峰值)三类值。在进行的多次测试中,无
论是Berkeley DB还是SQLite,只要他们测试程序没有变化,内存使用值也保持不变。
但是BDB服务器在每次运行时,其内存使用值每次都不相同,但是变化值不是很大。
表3 6.2.4数据库测试过程中栈和堆的使用情况
测试内存使用BDB测试程序BDB服务器SQLite测试程序
GetOnly 堆的总值49,194 794,390 92,353
堆的高峰值43.719 143.942 62,974
栈的高峰值33,604 1 56,699,000 38.380
Add/Update/ 堆的总值62,338 1.432,423 210,789
Get/Remove 堆的高峰值43.719 216.】08 64,929
栈的高峰值33,844 1 56,700,584 38.456
3.7本章小结
本章首先介绍了Linux操作系统下常见的数据库系统,随后根据智能手机的硬件
和软件特点分析了手机软件对嵌入式数据库的需求,通过对多个数据库的比较,选用
了SQLite作为Media Finder底层的数据库系统。其次,本章还对嵌入式数据库SQLite
的特点、结构以及开发技术做了详细的论述,并且设计了两组测试实验,分别为SQLite
进行常规操作耗时的测试以及SQLite和Berkeley DB的性能对比测试,通过实验获得
的数据对SQLite进行了性能分析。
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
4 Media Finder的设计和实现
Linux操作系统在智能手机中的运用,给手机的功能扩展带来了无限的空间,多
媒体技术更是手机发展的趋势。随着多媒体功能的日益强大,手机支持的媒体数据的
数量也随之不断增长,如何有效管理膨胀的媒体数据已经成为手机系统开发者的当务
之急。引入数据库进行数据管理是目前最理想、也是最有效的解决方法,在第三章中
我们讨论了嵌入式数据库SQLite在手机这种嵌入式设备中使用的优势,并且通过实
验对SQLite的性能进行了分析,在本章我们将基于嵌入式数据库SQLite给出其在手
机平台上应用的设计方案,对Media Finder的整体构架设计进行详细地描述,其次将
介绍Media Finder构架中MF、AUF、MCL、MSF、MAS、MCS、MSE七个功能模
块的设计和开发。
需要说明的是,Media Finder是整个项目,或者说是整个设计方案的名字,涉及
到数据库引擎层、服务层和应用层这三层结构,而不仅仅只是上层应用程序的名字。
其次,在Media Finder的初始版本中,管理的数据类型只包含音乐媒体和播放列表,
对更多数据类型的支持将在后期版本中实现。
4.1整体构架设计概述
MediaFinder的整体架构设计如图4.1.1所示,其分为三层:应用层(Application
Layer)、服务层(Service Layer)和引擎层(Engine Layer)。
在应用层,MediaFinder涉及两个模块的开发:媒体查询应用程序(MediaFinder
App,以下简称为MF)和应用程序服务接口(Meta.data Service AUF,以下简称为
AUF)。MF主要是为用户提供图形化交互界面、浏览数据操作结果、查看媒体文件
信息以及播放媒体文件。AUF作为一个共享的静态库,为提供上层应用程序提供使
用服务层服务的标准接口,应用程序通过AUF与服务层进行数据的交互操作。
服务层在Media Finder的设计中提供了三个重要功能:其一,在同一时刻,会存
在多个上层应用程序对数据库进行操作的情况,但是SQLite对并发操作采用的处理
策略是:允许多个进程打开同一数据库,其使用读/写锁来控制对数据库地访问。也
就是说,任何进程在对数据库进行读操作时,SQLite的整个数据在这一过程中被锁
定,禁止任何其它进程对其进行写操作,同样的,一个进程在对数据库进行写操作时,
其它任何进程也禁止对数据库进行读操作。服务层提供了处理并发操作的机制,由它
实现上层多个应用同时对数据库地访问;其二,服务层为上层应用提供了对数据库操
作的服务,通过服务层可以屏蔽底层数据库变化对上层的影响,对应用程序来说,底
层使用的数据库对其是透明的,方便了程序的移植;其三,服务层除了提供数据库操
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
I 媒体查询媒体播放器短信其他应用
——...j.—l—————————.j.应用.程.序—服—务—接口———————j——⋯..
元数据服务模块
元数据通信层
元数据服务控制台
元数据‘..⋯⋯⋯一-j 元数据
分类服务’ ’j 访问服务
元数据服务引擎
-■--:.:0DB c: .:寥。===蔓
◆i- :.0一o。=::sQ∞te.。。:’:_i:iliiii:i。。:_1.。
—————.. 函数调用
⋯⋯⋯⋯⋯’ 消息传递
图4.1.1 Media Finder的整体架构图
第三方模块
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
作的服务外,还通过接口与其他应用模块进行消息的交互,上层应用通过服务层可以
和需要的模块进行通信。
在服务层涉及四个模块的开发:元数据通信层(Meta.data Communication Layer,
以下简称为MCL)、元数据服务控制台(Meta.data Service Framework,以下简称为
MSF)、元数据分类服务(Meta.data Catalog Service,以下简称为MCS)和元数据访
问服务(Meta—data Access Service,以下简称为MAS)。MCL是一个介于应用和服
务的通信层,它与AUF间通过Socket进行消息的通信和数据的传递。MSF是整个服
务层的控制中心,控制着MCS、MAS和MCL这三个线程的运行,并且MSF提供了
Message Queue(消息队列)机制供MCL、MCS和MAS三个模块间通信。MCS服
务线程的主要工作是从物理的媒体文件中提取出metadam(元数据),并将提取出的
metadata存入数据库中,同时MCS也必须及时更新数据库数据,保持数据库数据与
文件系统中的文件信息一致。MAS服务进程的主要工作是为应用程序提供对数据库
的访问服务,以使任何应用程序可以对数据库中的数据信息进行读取、更新、排序等
引擎层中,Media Finder涉及了一个模块的开发:元数据服务引擎(Meta.data
Service Engine,以下简称为MSE)。MSE是一个共享库,提供了对嵌入式数据库SQLite
操作的接口。
4.2功能模块的结构设计
从上节对MediaFinder整体架构设计的描述中,我们可以知道Media Finder可以
分为七个主要功能模块,包括:MF、AUF、MCL、MSF、MCS、MAS和MSE。下
面将对这七个主要模块的功能和设计进行详细的阐述。
4.2.1 MF的结构和功能设计
MF是在应用层开发的一个应用程序,通过IVlF应用程序用户可以方便的管理和
浏览手机中存储的媒体文件信息。
MF的主要功能包括:
①提供了图形化窗口界面;
②提供数据浏览器,显示从数据库返回的媒体文件信息;
③在菜单中提供了播放列表查询、播放列表创建、播放列表更名、媒体信息查
询、媒体文件查询等操作选项;
④通过与媒体播放器、应用管理、文件管理、QT等模块连接的接口,使模块间
能根据功能需求互相调用。
MF模块的结构设计图如图4.2.1.1所示。
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
图4.2.1.1媒体查询应用程序的结构图
在MF结构设计中,数据浏览(Meta.dataBrowsing)模块管理不同的用户界面切
换和数据显示:元素据控制(Meta.data Controller)模块是MF的核心模块,负责控
制其它模块的运行、数据的传递以及与其它应用程序的连接接口:数据存储管理(Data
Storage Management)模块用于缓存数据库返回的数据结果,它调用AUF接口实现对
数据库的操作;服务库(Service Lib)模块包括了一些相关的库文件。
4.2.2 MSF的结构和功能设计
MSF是服务层的主进程,控制着两个服务线程MSC、MAS和一个通信线程MCL
的运行,同时MSF分别为MSC和MAS线程提供了各自的消息队列,MCL收到客
户端的消息后会立即将消息传给MSF,MSF从消息中解析出消息目的地信息后,根
据消息的目的地派发到相应服务进程的消息队列中,解决了上层多个应用需要并发操
作的问题。
MSF的主要功能包括:
①读取客户端发送的请求/命令消息,分析读入的消息,并派发消息给MCS/MAS
②发送Response(响应消息)给客户端;
③客户端向MSF注册其需要的Indication(通知消息)ID号,MSF根据客户端
的注册向客户端发送对应的Indication;
④控制Mcs、MAS、MCL线程的运行。
MSF模块的结构设计图如图4.2.2.1所示。
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
元数据通信层(MCL)
元数据服务控制台(MsF)
内部消息队列f
▲ J : I :
元数据元数据
分类服务访问服务
fMcs) (MAS)
图4 2 2.1元数据服务控制模块的结构图
在图4.2.2.1所示的结构中,MSF分为四个功能模块:内部消息队列(Framework
Message Queue)模块为服务层的各模块间通信提供了内部的消息队列机制,需要说
明的是,MSF内部消息队列与Linux为进程间通信提供的消息队列是不同的,我们
将在4.3.3中介绍MSF消息队列的结构和机制;消息派遣(Message Dispatch)模块
的功能是将从MCL层传入的消息按类型分派到对应的队列中;消息队列管理
(Message Queue Management)模块为MCS、MAS对各自消息队列提供了管理接口,
使其能对队列进行创建、删除、读写等操作;服务控制中心(Framework Controller)
模块是MSF的核心模块,需要完成对MCS和MAS线程的控制、MSF其它模块的管
理、通过MCL与客户端通信三个主要功能。
4.2.3 AUF、MCL的结构和功能设计
AUF和MCL分别工作在应用层和服务层,两者采用了Client/Server的结构,使
用本地Socket进行相互间的通信,为了便于读者理解,本节将AUF和MCL模块放
在一起介绍他们的结构和功能设计。
AUF以库文件的形式提供给应用程序使用,应用程序通过AUF与服务层通信,
完成所需要的数据库操作,并由AUF返回从数据库取得的数据结果和应用程序需要
的Indication。
硕士论文智能手机中基于SQLim的媒体查询功能的研究与实现
AUF的主要功能包括:
①同步和异步Socket的注册和注销。同步Socket是必须的,每个应用程序都必
须有一个同步Socket,如果应用程序需要以非阻塞(异步)方式获得数据库结果,或
者需要获得由向客户端MSF发送的Indication,则需要注册异步Socket;
②Client节点的管理。每对同步、异步Socket是存放在一个Client节点中的,每
个应用进程可能会创建多个线程通过AUF向服务器端访问,那么就会有多个Client
节点存在,所以AUF必须提供对Client节点的管理功能。
⑨对异步Socket的轮询功能。MSF发送的Indication和数据库的数据结果会通
过异步Socket返回,AUF中会创建一个子线程轮询异步Socket的消息。
④提供应用程序对数据库操作的API。应用程序只需要简单调用AUF提供的
API,便可以实现对数据库的操作。
MCL作为Meta.data Service Provider中的通信层,提供了上层所有客户端与服务
层模块间消息和数据的交互。
MCL的主要功能包括:
①对每个客户端的同步和异步Socket的注册和注销。这与AUF端的注册和注
销功能相互对应。
②Server节点的管理。同样,对于AUF中每个Client节点,MCL会创建一个对
应的Server节点,记录了Client节点的同步和异步Socket描述符、其注册的Indication
ID号等信息。
③侦听所有的Socket端口。当侦听到消息时,根据不同的Socket选用相应的消
息处理函数。
④提供API给MSF、MCS、MAS发送Indication和数据结果。
MCL模块和AUF模块的结构设计图如图4.2.3.1所示。
在图4.2.3.1所示的Client/Server结构中,MCL和AUF功能模块的划分基本相
似,由节点管理(Node Management)模块实现对其节点的管理和操作,Node中存储
同步和异步Socket描述符等相关信息,侦听端口(Listen Socket)模块在AUF中只
对自己的异步Socket侦听,而在MCL中则需要对所有的Socket侦听,API模块是
MCL和AUF分别提供给其它模块调用的函数接口。
MCL作为Media Finder的一个线程独立运行,而AUF作为一个库文件提供API
接口供上层应用调用。MCL的流程图如图4.2.3.2所示。
硕士论文智能手机中基于SQLitc的媒体查询功能的研究与实现
元数据通信层(MCLl
应用程序服务接口(AUF)
,点l同步Socket
N I异步Socket
篓誓|l A一
元数据服务控制台(MSF)
图4.2 3.1 MCL和AUF模块的结构图
图4.2.3.2MCL的流程图
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
MCL经过初始化后,不断地轮询注册的各个socket端口,在收到新消息后,判
断是否为socket连接相关的消息,如果不是socket连接相关的消息,将消息塞入MSF
的消息队列中,由MSF根据消息目的地分派消息。和socket连接相关的消息有:同
步socket注册、同步socket注销、异步socket注册、异步socket注销。如果是同步
socket注册的请求消息,MCL为其创建一个新节点,该节点内可以存储同步的socket
描述符、异步的socket描述符、读消息处理函数、写消息处理函数等信息;如果MCL
收到的是异步注册消息,则查找对应的节点,填入系统分配的异步的socket描述符;
如果是异步socket注销的请求消息,先关闭异步socket端口,再将对应节点中的信息
置空:如果是同步socket注销的请求消息,在关闭同步socket端口后,删除对应的节
点。在读入的新消息处理结束后,MCL判断是否有消息需要对socket进行写操作,
如果有,根据消息发送的socket端口进行写消息操作。
4.2.4 MCS的结构和功能设计
MCS是工作在服务层的一个服务线程,由主进程MSF创建,并控制其的运行。
在MCS内部,Media File Search(媒体文件查询)、Meta—data Extractor(元数据提取)
和Database Engine(数据库引擎)三个功能模块被设计成三个子线程,他们之间通过
使用内部消息队列进行通信,并使用互斥锁保证执行的唯一性。提交给数据库的每次
事务都会包含一定数目的meta—data数据,以提高数据库的访问效率。
MCS的主要功能包括:
①从物理的媒体文件中提取出meta.data信息,并将提取出的meta—data信息分
类存入数据库中:
②查询需要更新的媒体文件信息,根据其meta—data信息完成对数据库的更新;
MCS模块的结构设计图如图4.2.4.1所示。
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
图4.2.4.1元数据访问服务模块的结构图
在图4.2.4.1所示的结构中,分类服务控制(Meta—data Catalog Service Controller)
模块是MCS的主线程,负责其三个子线程的创建和控制、通过状态机对MCS的状
态进行调整、从消息队列中读入消息和向上层发送通知消息。媒体文件查询(Media
File Search)、元数据提取(Meta。data Extractor)和数据库引擎(Database Engine)
三个功能模块分别完成查询媒体文件、从媒体文件中提取meta—data(元数据)信息、
对数据库访问,他们内部的结构基本分为两个部分:消息队列和消息处理。
图4.2.4.2给出了MCS收到上层的分类请求处理后,对媒体文件信息进行一次
完整的分类存储的过程。
硕士论文智能手机中基于SQLitc的媒体查询功能的研究与实现
图4.2.4.2 MCS分类操作的序列框图
4.2.5 MAS的结构和功能设计
和MCS一样,MAS也是工作在服务层的一个服务线程,由主进程MSF创建和
控制。MAS根据上层应用对数据库的访问请求,从传入的消息体中提取相关信息,
通过MSE的API访问数据库。同时,将一些Indication消息发送给MSF,由MSF根
据客户端注册的消息ID统一发送。
MAS的主要功能包括:
①根据客户端的请求对数据库进行相应操作,数据结果从同步Socket或异步
Socket返回,这取决客户端访问方式是同步模式(阻塞式)还是异步模式(非阻塞式);
②从上层传入的消息进行解包,提取出相关操作所需要的信息;
③根据消息中请求的数据库操作访问数据库:
④由状态机控制自己状态,并且根据当前状态调用相应的消息处理函数。
MAS模块的结构设计图如图4.2.5.1所示。’
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
元数据服务11擎(MSE)
『⋯QL eDB]
图4.2.5.1元数据访问服务模块的结构图
MAS可以划分为三个主要功能模块,访问服务控制(Meta.data Access Service
Controller)模块的功能是:控制MAS的状态、从消息队列中读取消息、发送Indication
消息,协调其它模块完成上层的请求:消息分析(Message Extractor)模块根据消息
请求的操作类型从消息体中提取中相关的数据信息,并转化成MSE所需要的数据格
式;数据库引擎(Database Engine)模块通过MSE提供的API对数据库进行访问,
根据消息中要求的操作类型及相关信息完成上层应用需要完成的数据库操作。
在图4.2.5.2中,给出了MAS状态机的状态转移图。MAS的状态机有四种状态:
初始化、无法服务、可以服务和服务中,在新消息到来时,Meta.data Access Service
Controller根据状态机当前所处的状态,从相应的状态表中查询到对应的消息处理函
数来对新消息进行处理。
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
图4.2.5.2 MAS状态机的状态转移图
状态机的状态转移情况如表4.2.5.1所示。在MAS初始化后,MAS状态机进入
初始化状态,根据收到的消息进入无法服务或可以服务的状态;在每次处理新的请求
消息时,状态转变为服务中,处理结束时,状态机状态又转回可以服务的状态:在服
务中出现异常时,状态机的状态转变成无法服务状态。
表4.2.5 1 MAS状态机的状态转移表
当前状态消息新状态
初始化系统内存己满
分类服务进行中
初始化分类操作完成可以服务
无法服务系统内存可用
分类操作完成
可以服务系统内存己满
分类服务进行中
可以服务处理服务请求消息服务中
服务中服务请求处理结束可以服务
服务中异常无法服务
在MAS完成数据库操作后,获得的数据结果可以通过两种途径返回,一个是通
过同步socket返回,另一个是通过异步socket返回,这取决于客户端访问模式。如图
4.2.5.3中显示,当客户端以同步模式发送请求数据库操作的消息后,客户端会一直
处于等待状态,直到有操作结果返回,MAS在获得数据库结果后,通过同步socket
立即返回结果;当客户端以异步方式发送请求消息后,客户端继续运行,当MAS获
得数据库结果后,MAS会将数据结果封装在通知消息体中,通过异步socket返回给
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
围4.2.5 3 MAS处理消息的序列框图
4.2.6 MSE的结构和功能设计
MSE是由第三方提供的一个共享库,它提供了对数据库进行查询、读取、更新等
操作的API接口,上层通过调用MSE的API就可以实现对数据库的操作。图4.2.6.1
显示了MSE的结构。
MSE&层API 文件系统API
l圆圆圆圆网文件系统交互模块J
MsE底层AP‘
元数据服务
ll 属性1 f元数据1 值|组值I 隐含元数据
查询项查询属性
数据库接El
DB结果表sQL断言封装sQLite时间标签I
图4.2.6 1元数据服务引擎模块的结构图
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
因为MSE是基于ODBC层开发的,所以MSE底层的数据库选择范围就更为广
泛了,SQLite不是它底层数据库的唯一选择。
为了知道MSE在SQLite上进行数据库操作的性能情况,我们对MSE的性能做
了一个的测试:通过MSE完成对DB的读写操作,测试操作所需要的时间。文件总
数为1213个文件,包括jpg格式的图片文件和mp3格式的媒体文件。读、写操作分
读操作:取得(Retrieve)1000个文件名,条件是‘year==2004’;
写操作:删除(Remove)1 lO个文件,路径是‘/mmc/mmcal/imagel’;
实验的数据结果如表4.2.6.1所示。
表4.2.6.1MSE的性能测试结果
}SQLite 单位:秒
0P,No l 2 3 4 , Average
Retrieve 1.44 1.47 1.46 1.46 1.45 1.46
Remove 2.11 2 10 2.1l 2.10 2.12 2.11
从上表中的实验数据可以得出,读操作耗时为:1.46ms/l:Ierfile,写操作耗时为:
19.18ms/[)er file。从这个结果可以看出,MSE进行读、写操作所耗的时间虽然高于表
3.6.1.2中的结果,但它的性能是满足要求的。
4.3模块间的通信机制
在Media Finder的设计中,使用了三种进程间通信机制:Local Socket(本地Socket)、
Linux Message Queue(Linux消息队列)和Framework Message Queue(Framework内
部消息队列)。
4.3.1进程间通信机制:本地Socket
4.3.1.1 Socket的简介
Socket作为BDS UNIX的进程通信机制,是进行程序间通信(IPC)的BSD方法。
所谓socket,通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄,
应用程序通过cc套接字,,向网络发出请求或者应答网络请求【71。最初socket是为了支持
TCP/IP协议而开发的,现在它已被认为是开发非RPC网络应用程序的最好途径‘81。
Socket网络编程中最常见的是客户/N务器模式。服务端有一个进程(或多个进程)
在指定的端口等待客户来连接,服务程序等待客户的连接信息,一旦连接上之后,就
可以按设计的数据交换方法和格式进行数据传输。客户端在需要的时刻发出向服务端
的连接请求。
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
4.3.1.2 Socket的开发技术
在Media Finder的设计中,AUF和MCL两者之间的通信是在单机内进行的,所以
socket的通信域是Unix通信域(调用socket时指定通信域PF_LOCAL),而且为了保
证数据的传输的可靠性,选择了面向连接的TCP方式,通信服务类型设为
SOCK STREAM(字节流套接口)【3】a本节讨论的socket开发技术都是基于unix通信
域和TCP连接方式。
Unix域socket地址结构如下,它是一个不定长的结构:
struct sockaddr—un
short sun family;产地址族类型为AF—LOCAL+/
char sunA)ath[]; 产绑定的端口+/
Socket编程常用的函数有以下一些:初始化sock连接符socket(),绑定端bind(),
连接网络connect(),监听端口listen(),响应连接请求accept(),关闭socket连接close(),
socket轮询选择select(),接收/发送消,皂,read()/write(o
4.3.1.3 Media Finder中的Socket通信
应用层的AUF和服务层的MCL间的通信采用了本地socket通信机制,AUF(包
括它上层的App)作为客户端,MCL作为服务器端,每个客户端和服务器端之间都
有两个socket连接:同步socket和异步socket。如果应用以阻塞方式访问数据库时,
数据结果通过同步socket返回;如果应用希望以非阻塞方式访问数据库时,数据结果
则通过异步socket返回,同时MSF发送Indication消息也是通过异步socket的。AUF
和MCL间socket通信的结构示意图如图4.3.1.1所示。
同步端口异步端口
F、,, i.j
‘ 图4.3.1.1AUF和MCL间的socket通信
Socket通信的过程如图4.3.1.2所示。服务端进程先使用socket调用得到一个
socket描述符,然后将socket所指的结构(struct sockaddr—un)中的信息填写完,再
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
使用bind调用将一个名字与socket描述符连接起来。之后,服务端使用listen调用指
出等待服务请求队列的长度。然后由select调用监听socket端口,一旦有客户端发出
连接,accept返回客户的地址信息,并返回一个新的socket描述符,该描述符与原先
的socket有相同的特性,这时服务端就可以使用这个新的socket进行读写操作了。客
户端进程一般先使用socket调用得到一个socket描述符,然后使用connect向指定的
服务器上的指定端口发起连接,一旦连接成功返回,就说明已经建立了与服务器的连
接,这时就可以通过socket描述符进行读写操作了。
Connt }ct()!
—一Wri ,e()
--o Rea d() 乓
l C1。se0}一一一一一一一一一一
图4.3.1.2 C/S模式的socket通信过程
4.3.2进程间通信机制:Linux消息队列
4.3.2.1 Linux消息队列的简介
消息队列是Unix提供的进程间通信机制的一种,它是消息的链接表,存放在内核
中并由消息队列标识符(message queue identifier)标识。具有足够特权的任何进程都
可以往一个给定队列放置一个消息,具有足够特权的任何进程都可以从一个给定队列
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
读出~个消息【2】。取消息的次序不一定要按照先进现出的次序,可以按照消息的类型
字段取消息。
对于每个消息队列,内核维护一个定义在头文件中的消息结构:
struct msqid_ds
struct ipc_perm msg_perm;户read-write perms+/
stmct msg +msg_first; pptr to first message on queue+/
struct msg ’msg_last; pptr to last message on queue’|
ulong msg—cbytes;pcurrent#bytes on queue+/
ulong msg_qnum;产current#of messages on queue+/
ulong msg_qbytes;|’max嫱ofbytes allowed on queue’|
pid t msg_lspid;ppid oflast msgsndO’i
pid_t msg_lrpid;|’pid oflast msgrcvO’|
time—t msg stime;|’time of last msgsndO’|
time—t msg_rtime;|’time oflast msgrcvO’i
time—t msg_ctime;ptime oflast msgctlO’|
两个指针msg_first年Dmsg_last分别指向相应消息在内核中的存放位置,所以它们对
用户进程而言是无价值的。结构的其他成员是自定义的。
可以以一个消息链表形式画出内核中某个特定的消息队列,如图4.3.2.1所示。
假定~个其上有3个消息的队列,消息长度分别为1个字节、2个字节和3个字节,
而且这些消息就是以这样的顺序写入该队列的。三个消息的类型(type)分别为100、
200和300。
图4.3.2.1内核中的消息队列结构
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
4.3.2.2 Linux消息队列的开发技术
对消息队列的操作可以分成下面三种类型:
①打开或创建消息队列
消息队列的内核持续性要求每个消息队列都在系统范围内对应唯一的键值,所
以,要获得一个消息队列的描述字,只需提供该消息队列的键值即可。
②读写操作
消息读写操作比较简单,每个消息都类似如下的数据结构:
struct ms曲uf
long mtype;
char mtext[1];
mtype成员代表消息类型,从消息队列中读取消息的一个重要依据就是消息的类
型;mtext是消息内容,当然长度不一定为1。因此,对于发送消息来说,首先预置
一个msgbuf缓冲区并写入消息类型和内容,调用相应的发送函数即可;对读取消息
来说,首先分配这样一个msgbuf缓冲区,然后把消息读入该缓冲区即可。
③获得或设置消息队列属性
相应的,消息队列的API共有四个:
①im msgget(keyJ key,int msgflg)
该系统调用返回与健值key相对应的消息队列描述字。参数key是一个键值,由
ffok获得;msgflg参数是一些标志位。
②int msgrcv(int msqid,struct msgbuf+msgp,im msgsz,long msgtyp,int msgflg)
该系统调用从msgid代表的消息队列中读取一个消息,并把消息存储在msgp指
向的msgbuf结构中。
③int msgsnd(int msqid,struct msgbuf+msgp,int msgsz,int msgflg)
该系统调用向msgid代表的消息队列发送一个消息,即将发送的消息存储在msgp
指向的msgbuf结构中,消息的大小由msgze指定。
④im msgctl(int msqid,int cmd,struct msqid-ds+bur)
该系统调用对由msqid标识的消息队列执行cmd操作,共有三种cmd操作:
IPC STAT(获取消息队列信息)、IPC SET(设置消息队列的属性)、IPC RMID(删
除msqid标识的消息队列)【41。
4.3.2.3 Media Finder中的Linnx消息队列通信
MediaFinder与SCM.A11平台上的其它应用进程间的通信不是十分得频繁,并且
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
传递的消息也是比较得简单,所以Media Finder与其它应用进程间采用了Linux消息队
列的通信机制。MCS和AM进程间存在一个消息队列,AM通过这个消息队列向MCS
发送通知消息,包括SD卡插入、SD卡移走、主存储器可以访问、主存储器禁止访问、
语言改变等,MCS收到这些消息后,根据需要对数据库进行更新操作。MCS和文件
系统间同样也存在一个消息队列,当有媒体文件发生变化时,文件系统通过与MCS
间的消息队列通失IMCS,通知消息包括文件拷贝、删除、更名、位置改变、编辑等,
MCS根据变化的媒体文件信息去更新数据库数据。MCS和AM、文件系统进程间通信
的结构示意图如图4.3.2.2。
图4.3.2.2 MCS和AM、文件系统进程间的消息队列
4.3.3进程间通信机制:Framework消息队列
在服务层,MCL负责接收到客户端发送的消息,收到客户端的消息后立即将消息
交给MSF,MSF从消息中提取出目的地信息,再根据目的地信息派发给相应服务线程
(MAS或MCS)处理。因为服务层不只是为一个上层应用提供服务,所以在前面所
述的过程中会存在这种情况:MAs,MCS服务线程正在处理上一条消息,MSF又派发
来了新的消息,MAS/MCS无法处理这条新消息,结果造成了新消息的丢失。
元数据通信层(MCL)
——叫元数据
^一叫服l p (MSF) 访问服务
元数据卜队列1
(MCS) (MAS)
【................._J []
图4.3.3.1 MF中的Framework消息队列
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
为了解决这个问题,MSF提供了自己的消息队列机制,它为MAS和MCS分别提
供一条(或者多条,这取决于MAS/MCS的需要)消息队列,并提供对消息队列操作
的API。MF中的Framework消息队列结构如图4.3.3.1所示。当MSF收到MCL传来的新消
息后,它根据消息的目的地将消息放入对应的消息队列中,MAS/MCS在空闲时从自
己的消息队列中取出新消息进行处理。在MAS/MCS创建消息队列时,MSF会对每条
队列提供唯一的ID号,在对消息队列进行读写操作时,MSF需要根据这个ID定位相应
Framework消息队列和消息存储单元的结构定义如下:
//消息队列中消息存储单元的结构
typedef struct MF_FWK_QUEUE_ELEMENT_S
void*pData;/+存储消息+/
MF—MSG—PPdORITY—T priority;/+消息的优先级+/
struct MF_FWK—QUEUE_ELEMENT_S+pNext;/+下一条消息指针+/
struct MF_FWK_QUEUE_ELEMENT—S+pPrev;p上一条消息指针+/
}MF_FWK—QUEUE_ELEMENT_T:
//消息队列的结构
typedef struct MF—,FWK—。QUEUE_INFO—.S
UINT32 size; p消息队列的消息个数+/
MF_FWK_QUEUE—ELEMENl’-T+pHead;p首个消息指针+/
MF_FWK—QUEUE—ELEMENT—T+pTail; p末尾消息指针+/
}MF—FWK_QUEUE—BqFO—T:
Framework消息队列的API共有四个:
④void MF_FWK_SendMessageToQueue(void4 message,MF_FWK_QUEUE—ID—T
queue—id,MZ_QUEUE—RETURN_ERR_T+err);
该调用Nqueue
②void+MF_FWK_RecvMessageFromQueue(MF_FWK_QUEUE—rD—T queue—id,
MF_FWK_TIMEOUT-T timeout,MF—QUEUE_RETURN_ERR_T+err);
该调用从queue id代表的消息队列中读取一个消息。
③void MF_FWK_CreateQueue(MF_FWK_QUEUE ID T queue_id,
MF_QUEUE_RETURN_ERR_T 4err)
该调用根据queue 建对应的消息队列。.id仓Ij
硕士论文智能手机中基于SQLite的媒体查询功能的研究与实现
④void MF._
Copyright &}

我要回帖

更多关于 sqlite 查询所有表 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信