绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
比文件系统读写还快的SQl数据库- SQLite
2022-05-10 17:00:55

问题:

SQLite是一种C语言库,实现了一个 小型, 快速, 自包含, 高可靠性, 功能齐全的 SQL数据库引擎。SQLite是世界上常用的数据库引擎。SQLite内置于所有手机和大多数计算机中,并捆绑在人们每天使用的无数其他应用程序中。

SQLite 文件格式稳定,跨平台且向后兼容,开发人员保证至少在2050年之前保持这种格式。SQLite数据库文件通常用作在系统之间传输丰富内容的容器并作为数据的长期存档格式 。

特点

完整的ACID。

具有功能的全功能SQL实现,例如部分索引, 表达式索引,JSON, 公用表表达式和窗口函数。(省略的功能)

完整的数据库存储在 单个跨平台磁盘文件中。非常适合用作应用程序文件格式。

支持千兆字节大小的数据库以及千兆字节大小的字符串和Blob。(请参阅limits.html。)

代码占用量少:完全配置的内存不到600KiB,而省略了可选功能则更少。

简单易用的API。

快速:在某些情况下,SQLite 比直接文件系统I / O更快

用ANSI-C编写。 包括TCL绑定。数十种其他语言的绑定分别可用。

跨平台:开箱即用地支持Android,* BSD,iOS,Linux,Mac,Solaris,VxWorks和Windows(Win32,WinCE,WinRT)。易于移植到其他系统。

带有一个独立的命令行界面 (CLI)客户端,可用于管理SQLite数据库。

读写测试

SQLite读写小块(例如缩略图)的 速度比使用fread()或fwrite()从磁盘上的单个文件读取或写入相同的blob 快-35%。此外,一个单独的SQLite数据库包含10 KB的blob,与将blob存储在单个文件中相比,其磁盘空间大约少20%。

SQLite官方在Linux工作站(Ubuntu大约在2011年,快速SATA磁盘上使用Ext4文件系统)上运行了49个具有各种BLOB大小和SQLite页面大小的测试用例。对于每个测试用例,都会创建一个包含100MB BLOB内容的数据库。

BLOB的大小范围从10KB到1MB。BLOB的数量有所不同,以使BLOB的总内容保持在大约100MB。(因此,对于1MB大小,有100个BLOB,对于10K大小,有10000个BLOB,依此类推。)使用SQLite 版本3.7.8(2011-09-19)。SQLite 3.19.0版(2017-05-22)的新测量表明,对于10KB Blob的读取和写入,SQLite 比直接磁盘I / O 快-35%.

下面的矩阵显示了读取存储在单独文件中的BLOB所需的时间除以读取完全存储在数据库中的BLOB所需的时间。因此,对于大于1.0的数字,将BLOB直接存储在数据库中会更快。对于小于1.0的数字,将BLOB存储在单独的文件中会更快。

在每种情况下,都将调页器缓存大小调整为将缓存内存量保持在2MB左右。例如,一个2000页的高速缓存用于1024个字节的页面,而31页的高速缓存用于65536个字节的页面。BLOB值以随机顺序读取。

从上面的矩阵中得出以下经验法则:

数据库页面大小为8192或16384可为大型BLOB I / O提供佳性能。

对于小于100KB的BLOB,将BLOB直接存储在数据库文件中时,读取速度更快。对于大于100KB的BLOB,从单独的文件读取速度更快。

————————————————

总结:

SQLite性能高完全是因为它bai不具备很多数据库必要du的特性,比如完整事务性,大数据集(顺便吐槽,我们之前评测的时候测试过10亿,时间有一些比这个表里的SQLite快,也不知道这个评测怎么做的),连跨进程并发都没有。

 所以说白了,性能的优势完全来自于缺少的功能。 当然,它也有很大的适用范围


作者:Java程序员进阶技术
链接:https://juejin.cn/post/6847009772474990605

分享好友

分享这个小栈给你的朋友们,一起进步吧。

SQLite
创建时间:2022-03-11 16:41:28
SQLite
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • itt0918
    专家
戳我,来吐槽~