sqlite优化简单分析
文章目录
- 前言
- 一、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.性能优化
如果你的使用场景是读多写少,并且对数据安全性要求相对没那么高,你可以:
- 将 Synchronous 设置为 off,可以大大提高写入性能
- 将 journal_mode 设置为 WAL ,该模式下,读写可并发执行,不会互相阻塞,但写之间仍然是单进程串行
- 把 cache_size 缓存值根据你机器内存的大小适当调大
3.数据安全性优化
如果你对数据的安全性有一定要求,你可以:
- 将 Synchronous 设置为 normal,该模式下,在保证安全性基础下,写性能也有一定的提升
- journal_mode 同样可以使用 WAL模式,cache_size 也可以适当把缓存调大
总结
欢迎指出我的错误!
sqlite优化简单分析相关推荐
- SQL语句优化技术分析
SQL语句优化技术分析 操作符优化 IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格. 但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用 ...
- 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmContinueOptimizati() 函数分析 )
文章目录 前言 一.DexPrepare.cpp 中 dvmContinueOptimizati() 方法分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DEX 优化流程分析 | D ...
- JAVA源码优化、分析工具
JAVA源码优化.分析工具 一.11款用于优化.分析源代码的Java工具 1. PMD from http://pmd.sourceforge.net/ PMD能够扫描Java 源代码,查找类似以下的 ...
- 简述sqlite数据库的特点_为什么要用SQLITE?SQLITE数据库优点和缺点分析
<为什么要用SQLITE?SQLITE数据库优点和缺点分析>要点: 本文介绍了为什么要用SQLITE?SQLITE数据库优点和缺点分析,希望对您有用.如果有疑问,可以联系我们. SQLIT ...
- java面试宝典 之 物流配送路径优化问题分析与算法解读
物流配送路径优化问题分析与算法解读(一) 去年五一跳蚤以后,一直在一家公司参与物流配送软件开发的相关工作,负责的工作内容包括物流配送路径优化这一块.关于物流配送这一专业领域,自己以前也 ...
- 智能情绪分析技术_简单分析人工智能的表现在计算机网络应用技术中的优势
简单分析人工智能的表现在计算机网络应用技术中的优势 大数据时代背景下, 计算机网络技术迅猛发展, 而人工智能技术的发展也进一步推动了计算机网络技术的发展, 两者相互融合, 相互促进, 实现了双赢发展. ...
- 崔华 oracle简历,2013数据库大会:崔华-基于Oracle的SQL优化案例分析
2013数据库大会:崔华-基于Oracle的SQL优化案例分析 崔华的新书即将出版,其数据库大会上的演讲也非常精彩,他的新书十分值得期待. 2013年中国数据库技术大会第二天的"Oracle ...
- mysql 执行效率命令_MySQL优化--explain 分析sql语句执行效率
MySQL优化--explain 分析sql语句执行效率 explain 命令 explain 命令在解决数据库性能上市第一推荐使用命令,大部分的性能问题可以通过此命令来简单解决,explain可以用 ...
- 转:Android应用开发性能优化完全分析
转自:http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜 ...
最新文章
- 随机森林采用多数表决的一种,最终表决结果不是树上的类别(class)频率,而是树上的各类别概率的平均值
- Sth about Haml
- 为rm添加一个回收站|将linux下的rm命令改造成mv到指定的目录下
- 56岁潘石屹报名全国青少年编程能力等级测试,昔日地产大亨,今陷Python难抽身...
- php安装文件怎么打开文件_php文件如何打开
- 1000万贷款三年,到期一次性偿还1500万,这个利息算不算高?
- ad 单点登录 java 访问权限_AD 单点登录以及windows认证详细说明
- Elasticsearch生态技术峰会 | Elasticsearch在企查查的应用实践
- OpenShift 4.5 新特性 - 创建任务和定时任务
- java8 stream流操作
- 又延伸到socket去了。
- java程序设计pdf下载_Java程序设计基础(第5版) PDF 下载
- HCDA day1
- 小明一家过桥_「小明一家人过桥问题」如何用编程解决?
- 通过加速或跳过网页视频解决进度条无法拖动问题
- 医院运维管理平台(模板)
- echarts中如何配置图例形状、图标宽高、图标和文字间距、图例位置、文字颜色、字体大小
- javascript世界上最被误解的语言
- halcon-检测圆弧拟合圆
- 传统IDC部署网站(二)
热门文章
- 启用mysql系统找不到指定的文件类型_net start mysql 发生系统错误2 系统找不到指定的文件...
- 【demo记录】百度地图获取当前所在城市
- htc m8什么时候更新Android 6.0,速度够快 港版HTC M8获Android 6.0更新
- 平面设计必备学习软件
- 程矢Oracle PowerDesigner中生成Oracle版本主键和自增列
- 【诗歌】值得背诵古诗(一)
- nape.dynamics.InteractionFilter
- 新版本glib使用epoll代替poll
- 浙大毕业演讲 --- 马一浮
- 项目需求变更原因及处理