SQLite 性能优化实例分享_SQLite

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

大致应用场景是这样:

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

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

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

for 1000 : {

Select -> Update Or Insert

Select -> Update Or Insert

}

由于牵涉到两张表,所以会有两次,经过测试,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

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

总结:

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

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索sqlite
性能优化
sqlite 性能优化、sqlite3 性能优化、sqlite性能优化研究、安卓sqlite数据库实例、sqlite 优化,以便于您获取更多的相关知识。

时间: 2024-09-19 09:06:44

SQLite 性能优化实例分享_SQLite的相关文章

Android ListView性能优化实例讲解

前言:   对于ListView,大家绝对都不会陌生,只要是做过Android开发的人,哪有不用ListView的呢?   只要是用过ListView的人,哪有不关心对它性能优化的呢?   关于如何对ListView进行性能优化,不仅是面试中常常会被问到的(我前段时间面试了几家公司,全部都问到了这个问题了),而且在实际项目中更是非常重要的一环,它甚至在某种程度上决定了用户是否喜欢接受你的APP.(如果你的列表滑起来很卡,我敢说很多人会直接卸载)   网上关于如何对ListView进行性能优化,提

Go语言项目(kingshard)性能优化实例剖析

kingshard性能优化网络篇 最近kingshard的功能开发节奏慢了许多.一方面是工作确实比较忙,另一方面是我觉得kingshard的功能已经比较完善了,下一步的开发重点应该是性能优化.毕竟作为一个MySQL proxy,如果转发SQL的性能很差,再多的功能都无济于事.所以这个周末一直宅在家里优化kingshard的转发性能.经过两天的探索发现,将kingshard的转发SQL性能提升了18%左右,在这个过程中学到了一下知识.借此机会分享一下,同时也是督促一下自己写博客的积极性.:) 1.

Python 代码性能优化技巧分享_python

如何进行 Python 性能优化,是本文探讨的主要问题.本文会涉及常见的代码优化方法,性能优化工具的使用以及如何诊断代码的性能瓶颈等内容,希望可以给 Python 开发人员一定的参考. Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 80% 的工作量.优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率. 改进算法,选择合适的数据结构 一个

Asp.net 网站性能优化二则分享_实用技巧

随着后端优化空间越来越小,现在越来越多的网站更注重前端性能的优化,就是浏览器,http层面的优化,这里写两点最简单最有效的 asp.net网站优化技巧. 了解常见的网站性能优化技巧 首先我们要学一些优化网站性能和体验的理论和基础知识,雅虎已经帮我们总结好了,详见参考链接中的几篇文章,有好心人已经给翻译成中文了.这里面提到的一些技巧可操作性都很强,建议每一个网站开发人员都仔细学习并进行实践,可以说不了解这里面说的优化技巧,提升网站前端性能就无从谈起. 诊断网站性能 要想优化网站的前端性能,首先要查

Mysql性能优化方案分享_Mysql

网上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用status信息对mysql进行具体的优化. mysql> show global status; 可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句:mysql> show variables; 一.慢查询 m

JavaScript 性能优化技巧分享

JavaScript 作为当前最为常见的直译式脚本语言,已经广泛应用于 Web 应用开发中.为了提高Web应用的性能,从 JavaScript 的性能优化方向入手,会是一个很好的选择. 本文从加载.上下文.解析.编译.执行和捆绑等多个方面来讲解 JavaScript 的性能优化技巧,以便让更多的前端开发人员掌握这方面知识.   什么是高性能的 JavaScript 代码? 尽管目前没有高性能代码的绝对定义,但却存在一个以用户为中心的性能模型,可以用作参考:RAIL模型. 响应 如果你的应用程序能

dedecms负载性能优化实例,三招让你的dedecms快10倍以上第1/2页_dedecms

还是因为一个表的大数据造成性能严重下降?难道我们必须通过分多个表来存储才能解决问题吗?以下我们通过一个实例来解析和优化dedecms的数据管理性能,千万别让mysql当替罪羊,罪莫大焉. 测试数据是无意中得到的企业黄页的数据,数据量将近90万,都是完全真实的数据,测试使用的程序是dedecms4.0版本,你问为什么不用dedecms5.1?那是因为我们为了优化,针对dedecms做了很多修改,如果使用dedecms5.1,我们害怕收到法院传票--,补充一句,以下的优化方法均能在dedecms5.

数据表性能优化实例

     无论数据表采用了什么样的存储技术,经过一定的时间和事务处理运行后,在存储空间里都会产生一些"碎片",从而导致性能下降.此外,由于预先估计的不足,很可能会发现已经定义的表空间的大小不能满足需要等情况,这些问题都是管理员进行数据库的日常管理维护过程中会遇到的问题,解决这些问题的一个有效的办法就是表的重组. 数据表性能下降的原因     1.迁移的数据行    对数据淼母虏僮骰嵋鹗菪械睦┱梗虼说币桓鍪菘橹械目障锌占洳蛔阋匀菽赡掣鍪菪惺保庑惺萁映跏嫉氖菘橐频街匦路

表空间性能优化实例

合并表空间的空闲区 表空间在使用过程中将会出现空闲区,这会影响系统的性能.表空间空闲区的合并就是将相邻的小空闲区合并成完整的大空闲区,其原理如图13.56所示. (1)以[登录到管理服务器]方式来登录[企业管理器],在[管理目标导航器]中选择[网络]/[数据库]/[myoracle.mynet]/[存储]/[表空间]/[USERS]选项,单击鼠标右键,在弹出的快捷菜单里选择[显示Tablespace Map]选项,如图13.57所示. (2)出现如图13.58所示的表空间地图界面.在[菜单栏]选