• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >SQLite > SQLite 性能优化实例分享

SQLite 性能优化实例分享

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了sqlite性能,sqlite查询性能,sqlite3 性能,android sqlite实例,sqlite实例等相关知识,希望本文的分享对您有所帮助

最早接触 iOS 开发了解到的第一个缓存数据库就是 SQLite,后面一直也以 SQLite 作为中坚力量使用,以前没有接触到比较大量数据的读写,所以在性能优化方面关注不多,这次对一个特定场景的较多数据批量读写做了一个性能优化,使性能提高了十倍。

大致应用场景是这样:

每次程序启动会从服务器拉取一些数据,对本地数据库两个表进行同步更新,不存在就写入,存在就更新其字段。数据少的时候几十条,多的上千条。

由于缓存的数据可能会存在异步同时读写,所以做了一个后台同步队列,所有的缓存数据库操作都在这个队列里面,然后我监控了一下写数据库的关键代码执行耗时,一千条数据更新到数据库就能耗时 30 秒之久,磁盘写入在 1.5M/s 浮动, 虽然没有卡主线程,这个消耗即使在后台也是不可容忍的。

核心的数据库操作大概是这样的

for 1000 : {

Select -> Update Or Insert

Select -> Update Or Insert

}

</div>

由于牵涉到两张表,所以会有两次,经过测试,Select 一次几乎没有多少消息,可是 Update 或者 Insert ( [FMDatabaseQueue executeUpdate:] ) 就消耗大了,因为会写入磁盘,然后想到是不是可以把所有的 SQL 语句拼接起来,最后只想一次;再后来想到 SQLite 不是有事务 ( Transaction ) 嘛,于是尝试了一下利用 FMDB 的事务操作,在循环开始前 [db beginTransaction] ,循环结束 [db commit],包起来就行了。

增加事务之后的大概逻辑:

beginTransaction

for 1000 : {

Select -> Update Or Insert

Select -> Update Or Insert

}

commit

</div>

测试效果非常好,整个耗时从 30 秒下降到了2.8 秒左右,仅仅增加了两行代码。

总结:

踩过的坑,走过的坎,都是以后的经验

虽然利用事务取巧来提高了性能,但是这样做其实并不安全,好在所属场景对这部分数据绝对一致要求不是太高。
模拟器和真机有时候测试并不能重现同一个问题,因为所属架构、CPU、硬盘都不一样,所以性能测试最好还是以真机为准。该问题测试的时候在模拟器上很多问题都没有,因为硬盘比真机读写速度要高,所以避免了很多问题,测试的时候也就没有发现。
数据库设计设计的时候得多考虑考虑,多想想以后怎么扩展,怎么升级,读写的时候性能怎么样

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • SQLite 性能优化实例分享

相关文章

  • 2017-05-11SQLite 性能优化实例分享
  • 2017-05-11SQLite 入门教程二 SQLite的创建、修改、删除表
  • 2017-05-11保护你的Sqlite数据库(SQLite数据库安全秘籍)
  • 2017-05-11SQLite教程(五):数据库和事务
  • 2017-05-11SQLite教程(十三):C语言编程实例代码(1)
  • 2017-05-11SQLite数据库安装及基本操作指南
  • 2017-05-11Sqlite 常用函数 推荐
  • 2017-05-11SQLite优化方法
  • 2017-05-11sqlite中文乱码问题原因分析及解决
  • 2017-05-11SQLite教程(二):C/C++接口简介

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • SQLite教程(十三):C语言编程实例代码(1)
    • SQLite优化方法
    • SQLite速度评测代码
    • SQLite教程(九):在线备份
    • SQLite 入门教程四 增删改查 有讲究
    • SQLite3的绑定函数族使用与其注意事项详解
    • SQLite字符串比较时的大小写问题解决方法
    • SQLite教程(五):数据库和事务
    • SQLite教程(四):内置函数
    • SQLite教程(二):C/C++接口简介

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有