sqlite优化简单分析
文章目录
(210条消息) sqlite优化简单分析_sqlite 优化_单手入天象的博客-CSDN博客
前言
一、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 也可以适当把缓存调大
总结
欢迎指出我的错误!
————————————————
版权声明:本文为CSDN博主「单手入天象」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42132143/article/details/123425706
sqlite优化简单分析的更多相关文章
- 转——Android应用开发性能优化完全分析
[工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...
- SQLite入门与分析(二)---设计与概念(续)
SQLite入门与分析(二)---设计与概念(续) 写在前面:本节讨论事务,事务是DBMS最核心的技术之一.在计算机科学史上,有三位科学家因在数据库领域的成就而获ACM图灵奖,而其中之一Jim G ...
- Android 应用开发性能优化完全分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
- 【转】Android应用开发性能优化完全分析
http://blog.csdn.net/yanbober/article/details/48394201 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关 ...
- Android应用开发性能优化完全分析
1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...
- FFmpeg的HEVC解码器源代码简单分析:环路滤波(Loop Filter)
===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpe ...
- FFmpeg的HEVC解码器源代码简单分析:CTU解码(CTU Decode)部分-TU
===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpe ...
- FFmpeg的HEVC解码器源代码简单分析:CTU解码(CTU Decode)部分-PU
===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpe ...
- FFmpeg的HEVC解码器源代码简单分析:概述
===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpe ...
- x264源代码简单分析:宏块编码(Encode)部分
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
随机推荐
- 深入浅出容器学习--Docker数据卷
一.Docker数据卷 Docker镜像是由多个文件系统(只读层)叠加而成,当启动一个容器的时候,Docker会加载只读镜像层并在其上(镜像栈顶部)添加一个读写层.如果运行中的容器修改了现有的一个已经 ...
- SAP PI 配置soap web service
1.下载,启动ESB(Enterprise Services Builder) 2.找到对应的软件组件以及对应的命名空间: 3.选择对应的命名空间,右键新建文件夹: 点击创建,保存,文件夹对象右键激活 ...
- MCP 通信消息格式之 JSON-RPC 2.0 协议
一.背景介绍 MCP 中 Client 与 Server 间使用 JSON-RPC 2.0 作为通信消息格式.JSON-RPC 是 RPC(远程过程调用)的一种具体实现,RPC 是一种通信范式,其核心 ...
- Java中的队列与参数传递
Java中的队列数据结构 定义: 队列(Queue)是一种先进先出(FIFQ)的线性数据结构 基本性质: 先进先出 主要操作 2.1 入队:向队尾插入元素 2.2 出队:从队首移除元素 只允许在队首删 ...
- K8S三、实战
目录 创建第一个pod 创建Deployment 滚动升级和回滚 创建serivce 访问Service HPA 创建第一个pod kubectl create deployment nginx-de ...
- ICEE-Keyboard- 键盘工作原理与改装原理:扫描GPIO:{X行,Y列}感应点矩阵在按键触发点感应电路{x,y}通过MCU映射到按键字符
ICEE-Keyboard-键盘工作原理: 周期性扫描电路感应点矩阵: 电路感应点矩阵有总共X行与总共Y列的电路感应{电容式,电阻式,开关式}点, 例如总共12行, 总共12列; 则总共有144个键位 ...
- SciTech-EECS-STM32便携式电烙铁电原理图 + 几种常用的烙铁芯、功率及接法: jbc470/jbc245/t12/t20/tss02/jbc210/jbc115l
烙铁芯温控(测温)原理: T12仅有两根线: 测温和加热交替进行 你可能会奇怪烙铁头只引出了两根线, 是怎么实现加热和测温的? 因为烙铁头上有两种导体已形成热电偶, 而热电偶是可以测温的. 让我们来看 ...
- babylon.js 学习笔记(6)
接上回继续,今天继续捣腾动画,上一节咱们让汽车的轮子动了起来,回顾一下核心代码: //轮子转动 const wheelAnimation = (scene, wheels) => { //定义一 ...
- Note -「Variational Auto-Encoder」VAE 学习与 MNIST 实战
目录 \(1\) 数学基础 \(1.1\) KL 散度 \(1.2\) Evidence Lower BOund (ELBO) \(2\) 模型结构 \(2.1\) 基本假设 \(2.2\) Marg ...
- 进阶篇:3.1.1.4)DFM注塑-热熔
本章目的:了解塑胶件热熔装配方式的设计要点. 1.热熔的概念和原理 热熔是塑胶件与塑胶件或与其他零件,如金属件.印制电路板等进行装配的一种方法.热熔的原理:在塑胶件上有称为热熔柱的局部凸起,在需装配的 ...