文章目录

  • 前言
  • 一、sqlite 的读写性能
  • 二、sqlite 优化
    • 1.关键参数
    • 2.性能优化
    • 3.数据安全性优化
  • 总结

前言

SQLite 原本就是一款轻型的数据库,面向轻量级应用或者安卓应用等的使用场景。轻量级的设定也注定他并发读写性能不高,如果有高并发的要求更应该选择 mysql 等数据库。


一、sqlite 的读写性能

说起读写性能,大家都喜欢拿 QPS 和 TPS 说事,那我们就简单了解下 sqlie 的这两个指标

测试环境:

硬件 参数
CPU 8核,Intel® Xeon® CPU E5-2430 0 @ 2.20GHz
内存 16G
磁盘 SDD
系统 Linux 2.6.32

综合别人的测试数据,我下面说个大概的值,详细的测试结果与分析,请参考原本连接:

https://blog.csdn.net/zhaofuguang/article/details/91881115
https://blog.csdn.net/zhaofuguang/article/details/91881541

单纯写入的 TPS :60
单纯读取的 QPS :5W
WAL模式,读写比例 500:1 下: 读并发 = 6.94w 、 写并发 = 138

原例子中,有单行事务和多行事务同时提交的测试,我这里就忽略了,因为在实际使用场景下,大多是利用 mybatis 等 ORM 框架来操作数据库,这时一般是根据业务一个事务一个事务的执行,很少同时提交这么多语句的事务。

有些不太了解 sqlite 的小伙伴就有疑惑了,为什么读性能都去到每秒几个w了,但是写性能却只有可怜的每秒几十?

因为 sqlite 的设定是同一时刻只能有一个线程去进行写操作。

二、sqlite 优化

sqlite 作为一款嵌入式的数据库,没有集群等高端操作,所以性能优化也只是相对默认配置的提升,想高性能的请选用其他数据库

1.关键参数

Synchronous (设置磁盘的同步模式)

参数值 说明
0 或 off 不进行同步。写入数据后传递给操作系统完成
1 或 normal sqlite2的默认值,在关键磁盘操作的每个序列后同步。有小概率在断电等场景导致数据库损坏
2 或 full sqlite3的默认值,在每个关键磁盘操作后同步。频繁刷盘,性能较差,安全性高,不会损坏数据库文件

journal_mode (设置日志文件的存储方式,影响事务的rollback操作)

参数值 说明
DELETE 默认模式,事务结束时,日志文件删除
TRUNCATE 日志文件被阶段为零字节长度
PERSIST 日志文件保留在原地,但头部被重写,标明日志不再有效
MEMORY 日志记录在内存中,而不是磁盘
OFF 不保留任务日志
WAL 修改不直接写入数据库文件中,而是直接一个WAL的文件中,若事务失败,WAL记录被忽略;若事务成功,随后在某个checkpoint时间点写回数据库

cache_size (设置缓存值)

参数值 说明
2000 默认缓存大小。表示 sqlite 一次存储在内存中的数据库文件页数

2.性能优化

如果你的使用场景是读多写少,并且对数据安全性要求相对没那么高,你可以:

  1. 将 Synchronous 设置为 off,可以大大提高写入性能
  2. 将 journal_mode 设置为 WAL ,该模式下,读写可并发执行,不会互相阻塞,但写之间仍然是单进程串行
  3. 把 cache_size 缓存值根据你机器内存的大小适当调大

3.数据安全性优化

如果你对数据的安全性有一定要求,你可以:

  1. 将 Synchronous 设置为 normal,该模式下,在保证安全性基础下,写性能也有一定的提升
  2. journal_mode 同样可以使用 WAL模式,cache_size 也可以适当把缓存调大

总结

欢迎指出我的错误!

sqlite优化简单分析相关推荐

  1. SQL语句优化技术分析

    SQL语句优化技术分析 操作符优化 IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格. 但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用 ...

  2. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmContinueOptimizati() 函数分析 )

    文章目录 前言 一.DexPrepare.cpp 中 dvmContinueOptimizati() 方法分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DEX 优化流程分析 | D ...

  3. JAVA源码优化、分析工具

    JAVA源码优化.分析工具 一.11款用于优化.分析源代码的Java工具 1. PMD from http://pmd.sourceforge.net/ PMD能够扫描Java 源代码,查找类似以下的 ...

  4. 简述sqlite数据库的特点_为什么要用SQLITE?SQLITE数据库优点和缺点分析

    <为什么要用SQLITE?SQLITE数据库优点和缺点分析>要点: 本文介绍了为什么要用SQLITE?SQLITE数据库优点和缺点分析,希望对您有用.如果有疑问,可以联系我们. SQLIT ...

  5. java面试宝典 之 物流配送路径优化问题分析与算法解读

    物流配送路径优化问题分析与算法解读(一)         去年五一跳蚤以后,一直在一家公司参与物流配送软件开发的相关工作,负责的工作内容包括物流配送路径优化这一块.关于物流配送这一专业领域,自己以前也 ...

  6. 智能情绪分析技术_简单分析人工智能的表现在计算机网络应用技术中的优势

    简单分析人工智能的表现在计算机网络应用技术中的优势 大数据时代背景下, 计算机网络技术迅猛发展, 而人工智能技术的发展也进一步推动了计算机网络技术的发展, 两者相互融合, 相互促进, 实现了双赢发展. ...

  7. 崔华 oracle简历,2013数据库大会:崔华-基于Oracle的SQL优化案例分析

    2013数据库大会:崔华-基于Oracle的SQL优化案例分析 崔华的新书即将出版,其数据库大会上的演讲也非常精彩,他的新书十分值得期待. 2013年中国数据库技术大会第二天的"Oracle ...

  8. mysql 执行效率命令_MySQL优化--explain 分析sql语句执行效率

    MySQL优化--explain 分析sql语句执行效率 explain 命令 explain 命令在解决数据库性能上市第一推荐使用命令,大部分的性能问题可以通过此命令来简单解决,explain可以用 ...

  9. 转:Android应用开发性能优化完全分析

    转自:http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜 ...

最新文章

  1. 随机森林采用多数表决的一种,最终表决结果不是树上的类别(class)频率,而是树上的各类别概率的平均值
  2. Sth about Haml
  3. 为rm添加一个回收站|将linux下的rm命令改造成mv到指定的目录下
  4. 56岁潘石屹报名全国青少年编程能力等级测试,昔日地产大亨,今陷Python难抽身...
  5. php安装文件怎么打开文件_php文件如何打开
  6. 1000万贷款三年,到期一次性偿还1500万,这个利息算不算高?
  7. ad 单点登录 java 访问权限_AD 单点登录以及windows认证详细说明
  8. Elasticsearch生态技术峰会 | Elasticsearch在企查查的应用实践
  9. OpenShift 4.5 新特性 - 创建任务和定时任务
  10. java8 stream流操作
  11. 又延伸到socket去了。
  12. java程序设计pdf下载_Java程序设计基础(第5版) PDF 下载
  13. HCDA day1
  14. 小明一家过桥_「小明一家人过桥问题」如何用编程解决?
  15. 通过加速或跳过网页视频解决进度条无法拖动问题
  16. 医院运维管理平台(模板)
  17. echarts中如何配置图例形状、图标宽高、图标和文字间距、图例位置、文字颜色、字体大小
  18. javascript世界上最被误解的语言
  19. halcon-检测圆弧拟合圆
  20. 传统IDC部署网站(二)

热门文章

  1. 启用mysql系统找不到指定的文件类型_net start mysql 发生系统错误2 系统找不到指定的文件...
  2. 【demo记录】百度地图获取当前所在城市
  3. htc m8什么时候更新Android 6.0,速度够快 港版HTC M8获Android 6.0更新
  4. 平面设计必备学习软件
  5. 程矢Oracle PowerDesigner中生成Oracle版本主键和自增列
  6. 【诗歌】值得背诵古诗(一)
  7. nape.dynamics.InteractionFilter
  8. 新版本glib使用epoll代替poll
  9. 浙大毕业演讲 --- 马一浮
  10. 项目需求变更原因及处理