2023年6月28日发(作者:)
2014年第23卷第4期 http://www.c—S—a.org.cn 计算机系统应用 Android数据库SQLite性能优化① 林培杰,朱安南,程树英 (福州大学物理与信息工程学院,福州350108) 摘要:SQLite是Android平台的重要数据库引擎,具有零配置、支持事务、移植性好等特点,负责多种格式数 据的存储.随着用户数据规模的扩大与复杂度的增加,对数据库性能提出更高的要求.数据库性能直接影响应用 程序的性能和用户的体验.本文分析了SQLite事务机制和索引结构,并通过手动添加事务和合理创建B.tree索引, 大大缩短了Android SQLite数据库的插入与查询时间,提高了SQLite性能. 关键词:Android SQLite;性能优化;事务;索引 Performance Optimization of Android Database SQLite LIN Pei—Jie,ZHU An—Nan,CHENG Shu-Ying (College ofPhysics and Information Engineering,Fuzhou University,Fuzhou 350108,China) Abstract:SQLite is an important database engine on Android platform.It has features of zero—configuration,supporting transactions and excellent portability.And it is responsible for multiple formats of data storage.With the expansion and complexiyt of the user data,there is higher demand upon the SQLite performance which may affect the performance of the application program and the user experience.This paper analyzes the transaction mechanism and the index structure of SQLite.By means of turning on transaction manually and creating B—tree index properly,it greatly reduces the time needed to insert and query data from Android SQLite,which improves SQLite performance ultimately. Key words:Android SQlite;performance optimization;transaction;index 随着嵌入式移动设备的普及和用户数据的高频存 取,数据库性能得到日益重视.SQLite是由 D.RichardHipp开发并于2000年发布的一款开源、轻 量级的关系型数据库,占用极少的内存资源,并具有 良好的可移植性l】1.目前,SQlite数据库广泛应用于主 流的移动设备l2】,如iPhone和Android平台利用SQLite 显得尤为重要 l Android SQLite简介 Android在运行环境中集成了SQLite数据库,可 供每个应用程序使用且无服务进程f3].由于支持 SQLite的Dalvki虚拟机是基于Java的,因此需对 SQLite API(Application Programming Interface,应用 程序编程接口)重新封装为可供Android层使用的API 数据库引擎实现结构化数据的存储,并适用于多种数 据类型的存储,如联系人、Notes和用户配置等等.数 据库操作的执行时间,关系到整个应用程序的性能. 特别是在Android应用程序中,如果插入或更新数据 库操作时间过长,则会出现应用程序无响应(ANR, Application Not Responding),势必降低用户体验.因 此,除了将数据库的操作放在新的线程,避开uI主线 程,对数据库的插入、查询等重要操作进行时间优化, ①收稿时间:2013—08—19;收到修改稿时间:2013.09—10 接口.SQLite0penHelper类是Android为SQLite数据 库提供的一个重要抽象类,用于管理数据库的创建、 版本更新、打开和关闭等操作.sQLite0penHelper工作 流程如图1所示,对数据库进行操作时,首先检查目 标数据库是否存在,若不存在,调用onCreate0方法创 建数据库;其次检测版本号,若与构造函数中传入的 Research and Development研究开发193 计算机系统应用 http://www.c—S—a.org.cn 2014年第23卷第4期 版本不一致,则执行onUpgradeO方法更新数据库版本 通过调用SQLite0penHe1per的getReadableDatabase() 留(RESERVED)、 未决(PENDING)和独享 (EXCLUSIVE).所有事务初始为未加锁状态,在数据 的插入前需要读取数据并检查数据格式,此时需获得 或getWriteableDatabase()方法,打开并返回一个可读/ 可写的数据库实例SQLiteDatabase db.用户通过db对 象完成数据库的添加(insert)、删除(delete)、修改 该数据库文件的共享锁,避免其他的写操作.在数据 修改前需要获取保留锁,并生成回滚日记,确保在一 (update)、查询(select)等操作. 构造SQLiteOpenHe1pe 传入文件名、版本等 N 数据库存在? \/ //\\ IY 创建数据库 创建数据库 版本更新? \/ . 数据库准各 调用 OnCreate0 图1 sQLite0penHe1per工作流程 Android应用程序所创建的sqlite数据库是私有的, 并保存在/data/data/packageName/database目录下.数 据库查看方法有:①利用adb工具访问SQLite数据库, 运行cmd后执行“adb shell”进入shell命令模式并找到 数据库目录,再根据SQLite命令对数据库进行查询、 添加等操作;②使用DDMS导出SQLite数据库,再通 过图形界面管理工具(sqlite administrator等)查看具体 数据.特别需要注意的是,在真机调试时,需要获得 root权限方可获取数据库文件及数据. 2 SQlite事务处理 2.1事务机制与锁 Android平台特别注重SQLite事务管理,而良好 的事务机制是保证数据库性能的关键[ .SQLite事务 的操作,利用了“原子提交”的重要特性,意味着在同 一个事务中的所有操作可能被完整地完成或不完成, 不存在仅有部分完成的情况.用户可以根据需要指定 事务的持续时间,即执行相当任务后,再提交事务. 而事务与锁在查询处理数据库时密切相关,通过锁来 确保数据库原子提交特性. SQLite事务与锁的关系如图2所示『4】.SQLite有五 种锁状态:未加锁(UNLOCKED)、共享(SHARED)、保 1 94研究开发Research and Development 个时间点上,仅有一个进程去写入数据,以及在异常 情况下恢复原始数据.接着将保留锁提升为未决锁, 获取独享锁,避免其他的读写操作,再将更改过后的 缓存数据更新到存储器中.最后释放独享锁 完成事 务的提交.每次事务需要经过“事务打开”、 “执行事 务”、“关闭事务”,对于自动提交事务,所有插入操作 均各自经历完整的状态转换为: NULOCKED一>PENDING~>SHARED一>UNLOCKED 一>PEND1NG一>SHARED~>UNLOC.K1z D… 如果采用手动提交,执行提交命令后会让 SHARED状态直接转为UNLOCKED,所有操作在同 一个共享状态执行,其状态转换路径为: I5NI 0CKED一>PENDTNG一>SHARED~>IJ-NI,0CKED 图2 SQLite事务与锁 2.2事务优化 Android SQLite是一种储存在单一磁盘文件中的 数据库.因此,对它的访问、读写等操作,实质是对文 件的不断访问与读写,频繁的操作将耗用大量进程时 间,极大影响数据库的存取性能[ .每次操作默认启 动一个事务,而通过手动添加事务,能够有效避免频 繁的打开和关闭事务.首先调用SQLiteDatabase的 计算机系统应用 http 1| p .C・S—a.org.ca 2014年第23卷第4期 由B.Tree结构分析,每次检索最多需要(h.1)次I/O操作. h为树的深度,而且一般很小.而是否在数据库中创建索 引,决定于多方面因素.特别是大规模的数据库中,更 需要建立索引来缩小查询时间.本文在Android手机上 对存放不同规模数据的数据库进行查询测试,测试平均 制和索引结构,通过手动添加事务减少了重复打开、 提交事务,减少耗时的I/O读写次数,并通过创建 B.tree结构的索引降低缩短查询时间.在Android手机 上测试,测试表明二者分别在大量插入数据和从大数 据库中查询上,时间的缩短是非常可观的.Android 时间如表2所示.测试结果表明:随着数据库规模的扩 大,利用索引查询可以节省大量的时间,加快数据库访 问速度,提高了整个应用程序的性能. 表2索引查询时间测试 SQLite数据库性能的优化,扩大了应用范围和建立更 加良好的用户体验. 参考文献 1 Lv JY,Xu SG,Li YJ.Application research of embedded database SQLite.2009 International Forum on Information Technology and Applications.IEEE,Computer Society.2009 539-543. 2尧有平,薛小波.基于ARM—Linux的SQLite嵌入式数据库 的研究.微计算机信息,2008,24(2):64—66. 3 Wang Liu ZJ Xiang Liu XH.Research on concurrrency and transaction optimization of relational database.计算机 4结语 SQLite数据库是一款轻量级嵌入式数据库,广泛 应用于Android等移动设备.数据库性能调优旨在适 技术与应用发展,2008:321—325. 4 Allen G Owens M.The definitive guide to SQlite.American, Apress,2010:193—144. 应数据库规模的扩大化和复杂化,缩短查询、插入等 数据库操作的时间,提高应用程序性能.而SQLite数 据库实际是磁盘上的文件,频繁或大量的对文件操作, 降低了程序运行速度.本文充分分析了SQLite事务机 (上接第200页) 5 Database Speed Comparison.http://www.sqlite.org/speed. htm1. 6禹亮.基于内容的图像索引和浏览算法研究[学位论文].长 沙:湖南大学,2007. 测试结果表明,此应用满足即时通信应用的基本 功能及需求. , 2姜梦兰.基于消息中间件服务可靠性保证方案的研究与实 现[硕士学位论文].成都:电子科技大学,2010. 3 Hunkeler U,Truong HL,Stanford—Clark A.MQTT-S—A 5 结语 本文研究了MQTT协议的结构、消息格式,并且 使用此协议在Android平台上实现了一款基于MQTT 协议的即时通信应用,并验证了应用的使用效果. publish/subscribe protocol for wireless sensor networks. Communication Systems Software and Middleware and Workshops.Bangalore.2008.791—798. 4 MQTT V3.1 Protocol Speciifcation.http://wenku.baidu.com. 2012 MQTT作为一款轻量级的消息发布/订阅协议,其在手 机上的发展前景十分可观,在Android推送方面的应 5 Lee S,Kim H,Hong D,Ju H.Correlation analysis of MQTT 用还有很大的发展空问,尤其是此协议低带宽的特点, 使其在带宽受限的地方倍受青睐.本文中的即时通信 应用并不完善,尤其是安全性方面未做考虑,在未来 的工作中将会侧重这方面的研究. loss and delay according to QoS leve1.Information Networking(ICO1N).Bangkok.2013.714—717. 6安卓推送技术探讨.http://wenku.baidu.corn.2012. 7袁远.基于Android平台端到端即时通信系统的分析与设 计[硕士学位论文].北京:北京邮电大学,2012. 参考文献 1 MQ Telemetry Transport.http://mqtt.org 1 96研究开发Research and Development 8王楠,宋飞,周华春.一种基于Android平台的即时通信方案. 计算机应用与软件,2013,(4):107—109,148.
发布者:admin,转转请注明出处:http://www.yc00.com/web/1687954334a60503.html
评论列表(0条)