比文件系统读写还快的SQl数据库- SQLite

昨天上一章节我写到了这篇【做为架构师,下一次你应该考虑的10个数据库】html

(上篇文章连接:https://juejin.im/post/5f0288db5188252e42158877)
java

有个掘友问了我一个问题,今天就来讲明一下这个问题的答案,就当普及新知识数据库

问题:

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

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

特色

完整的ACID。并发

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

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

支持千兆字节大小的数据库以及千兆字节大小的字符串和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学习交流群:925895158

一块儿探讨一些好奇的问题,固然也能够微我:xuanwo013一块儿交流学习一下,共同进步,

有须要的还能够分享一些好的资料,喜欢就来个小关注吧,感谢!!!


相关文章
相关标签/搜索