分享一个SQLite 性能优化实例
本文给大家分享的是个人在实际项目中对于sqlite的一次优化的记录,非常简单实用,希望对大家学习sqlite能够有所帮助。 |
最早接触 iOS 开发了解到的第一个缓存数据库就是 SQLite,后面一直也以 SQLite 作为中坚力量使用,以前没有接触到比较大量数据的读写,所以在性能优化方面关注不多,这次对一个特定场景的较多数据批量读写做了一个性能优化,使性能提高了十倍。
大致应用场景是这样:
每次程序启动会从服务器拉取一些数据,对本地数据库两个表进行同步更新,不存在就写入,存在就更新其字段。数据少的时候几十条,多的上千条。
由于缓存的数据可能会存在异步同时读写,所以做了一个后台同步队列,所有的缓存数据库操作都在这个队列里面,然后我监控了一下写数据库的关键代码执行耗时,一千条数据更新到数据库就能耗时 30 秒之久,磁盘写入在 1.5M/s 浮动, 虽然没有卡主线程,这个消耗即使在后台也是不可容忍的。
核心的数据库操作大概是这样的
for 1000 : {Select -> Update Or InsertSelect -> Update Or Insert}
由于牵涉到两张表,所以会有两次,经过测试,Select 一次几乎没有多少消息,可是 Update 或者 Insert ( [FMDatabaseQueue executeUpdate:] ) 就消耗大了,因为会写入磁盘,然后想到是不是可以把所有的 SQL 语句拼接起来,最后只想一次;再后来想到 SQLite 不是有事务 ( Transaction ) 嘛,于是尝试了一下利用 FMDB 的事务操作,在循环开始前 [db beginTransaction] ,循环结束 [db commit],包起来就行了。
增加事务之后的大概逻辑:
beginTransactionfor 1000 : {Select -> Update Or InsertSelect -> Update Or Insert}commit
测试效果非常好,整个耗时从 30 秒下降到了2.8 秒左右,仅仅增加了两行代码。
总结:
踩过的坑,走过的坎,都是以后的经验
虽然利用事务取巧来提高了性能,但是这样做其实并不安全,好在所属场景对这部分数据绝对一致要求不是太高。
模拟器和真机有时候测试并不能重现同一个问题,因为所属架构、CPU、硬盘都不一样,所以性能测试最好还是以真机为准。该问题测试的时候在模拟器上很多问题都没有,因为硬盘比真机读写速度要高,所以避免了很多问题,测试的时候也就没有发现。
数据库设计设计的时候得多考虑考虑,多想想以后怎么扩展,怎么升级,读写的时候性能怎么样。
分享一个SQLite 性能优化实例相关推荐
- 记录一个android性能优化宝藏级总结
发现一个android性能优化文章宝藏级总结,太赞了,感谢大佬的无私奉献总结,防止丢失,在此记录一下 传送门 复制一些目录,增加一些篇幅{嘻嘻} 优化心得和经验 抖音 Android 性能优化系列:启 ...
- SQLite 性能优化
SQLite性能优化 主要通过pragma指令来实现. 比如: 空间释放.磁盘同步.Cache大小等. 不要打开.前文提高了,Vacuum的效率非常低! PRAGMA auto_vacuum; PRA ...
- apache php 调优_Apache的性能优化实例(一)
本文主要和大家分享Apache的性能优化(一),希望能帮助到大家. Apache缺省的最大用户数是256个:这个配置对于服务器内存还是256M左右的时代是一个非常好的缺省设置,但随着内存成本的急剧下降 ...
- 老李案例分享:Weblogic性能优化案例
老李案例分享:Weblogic性能优化案例 POPTEST的测试技术交流qq群:450192312 网站应用首页大小在130K左右,在之前的测试过程中,其百用户并发的平均响应能力在6.5秒,性能优化后 ...
- Android ListView性能优化实例讲解
前言: 对于ListView,大家绝对都不会陌生,只要是做过Android开发的人,哪有不用ListView的呢? 只要是用过ListView的人,哪有不关心对它性能优化的呢? 关于如何对ListVi ...
- Web前端教程分享:页面性能优化办法有哪些?
引子 互联网有一项著名的8秒原则.用户在访问Web网页时,如果时间超过8秒就会感到不耐烦,如果加载需要太长时间,他们就会放弃访问.大部分用户希望网页能在2秒之内就完成加载.事实上,加载时间每多1秒,你 ...
- 分享一个windows 10优化用的注册表
转摘于http://wuyou.net/forum.php?mod=viewthread&tid=413465 分享一个自己用的windows 10优化用的注册表,再也不用点来点去了... 开 ...
- sqlite性能优化
1.数据库性能上 1.1 批量事务插入,提升数据插入的性能 由于sqlite默认每次插入都是事务,需要对文件进行读写,那么减少事务次数就能简书磁盘读写次数从而获得性能提升. 1.2 单条sql优于多条 ...
- 【每日一练 085】性能优化-实例优化(四)
墨墨导读:本文出自墨天轮"每日一练"专栏,此专栏已连更84天,欢迎关注https://www.modb.pro/topic/26446(复制到浏览器中打开或者点击"阅读原 ...
最新文章
- http路径转file会变成反斜杠_PHP session反序列化漏洞
- ERP云端争霸 甲骨文和SAP打对攻 金蝶忙转身用友原地等待
- 喜报!神策数据荣获“2019 银行业数字营销大赛”智能营销类金奖
- YOLOv2和YOLOv3效果对比
- sklearn 线性回归_使用sklearn库做线性回归拟合
- mysql+distinct+max_MySQL中distinct与group by之间的性能进行比较
- 项目周期一般多久_深圳app开发公司的软件开发要多久?
- 古风祥云PNG免抠素材,喜欢吗?
- Oracle 隔离级别
- LR(1)项目集族的构造:如何确定前向搜索符
- LayoutInflater 总结
- 日本性价比旅馆分析报告
- 4G模块ME909S-821调试记录
- 计算机测试的论文,软件测试毕业论文-软件工程论文-计算机论文.docx
- 【花雕小实验01】使用万用表测量OPT101模拟光照传感器模块
- 定弘法师(钟茂森博士)的九大愿
- speedoffice和office的区别
- 把图片修改为单色图片
- 华为交换机基础命令配置
- 利用cmd(命令提示符)安装mysql配置环境