最近在部署PHP网站项目的时候,发现项目并没有使用传统的三大关系型数据库,而是采用了sqlite数据库,以前的时候,也见过sqlite,但是并没有深入了解其功能和用法,好奇心驱使,决定好好研究一下sqlite,因为发现它跟其他数据库有很大的不同。
在项目里,sqlite数据库是一个单独存在的一个数据库文件(*.db;*.s3db),就像MySQL,都是需要单独的运行环境,而且数据库也是不会放到程序里面(sqlserver也可以将数据库文件放到程序中),真的好神奇
sqlite到底是什么?
百度百科:SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。
它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql这款开源的世界著名数据库管理系统来讲,它的处理速度比他更快。
SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。
本机存储,低并发,低数据量,零配置,零管理
(从上面的资料来看,sqlite太nb了,简直是开发神器。)
具体sqlite有哪些特点?我上网查了些资料
1.管理简单
最让我惊奇的是它的可脱机性,这也是我最开始好奇它的原因。这也使得sqlite的管理十分简单。
那原理是什么呢?
SQLite容易管理——因为它是一个单一文件(或在某些时候是一个文件+事务日志)。文件格式在很多主要的版本上都非常稳定,所以假设有一个从3.0.0版本(在2004年)开始的SQLite数据库文件,那么我也可以使用最新的SQLite 3.10.0读取它。如果我想将数据库文件放到一个U盘中,那么我只要复制文件,放任何我想使用它的地方就可以。如果我想每天晚上备份,那么我只要同步数据库文件到S3。如果我想分享一些和同事一起做的数据分析,那么完全可以发送一份数据库文件的副本给他们,然后他们就可以使用了。
数据库以一种单个文件的形式存在,且具备稳定的格式,是SQLite的特色。
2.不断提高又坚如磐石的稳定性
SQLite是由一些真正了不起的软件工程师积极开发的。高品质的新功能正以一种惊人的速度被添加进来。就在最近,SQLite通过json1扩展增加了对JSON数据的支持。 SQLite还发布了全文检索扩展的改进版本,其中包括使用BM25算法的结果排名。
SQLite现在的运行速度是3.8.0版本的两倍,3.3.9版本的三倍
尽管出现了这么多的变化和改进,但SQLite很少引入bug。 SQLite的测试套件被广泛认为是行业中最好的测试套件之一,并且关于SQLite如何测试的页面经常出现在HackerNews上,因为开发人员前赴后继地发现了这篇令人印象深刻的文档。
3.可扩展和可控制
由于SQLite是通过应用程序嵌入进去的,所以它运行在相同的地址空间里,并且可以代你执行应用程序代码。无论是Python标准库SQLite驱动程序——pysqlite,还是可选驱动器aspw,都可以提供定义了自定义SQL函数、聚合函数和归类的API。
4.快如闪电
SQLite非常快。由于它运行在同一台机器上,所以在执行查询或读取结果时是没有网络负担的。又因为它运行在相同的地址空间,所以没有线路协议、序列化,也不需要通过unix套接字进行通信。当资源稀缺和效率是至关重要的时候,SQLite还可以运行在移动设备上。 SQLite还支持大量的编译标识,允许你删除你不打算使用的功能。
SQLite的速度弥补了它最大的不足之处之一,那就是数据库文件锁定写入。令人难以置信的快速写数据,只当有大量的并发写提供服务时,数据库锁定才会成为一个问题。
5、WAL模式(读写同步)
SQLite的3.7.0版本中补充了一种利用预写日志的新日志记录方法。虽然其本身真不算是令人振奋的消息,但这对web应用程序开发人员(或任何处理并发的人员)意味着读的服务不会再阻塞写的服务,反之亦然。换言之就是,读和写可以同时地发生。如果没有WAL模式,那么要想写入数据库,写的服务则需要独占访问数据库,并且不能发生读的服务,直到写的服务结束。
从上面对sqlite的优点的叙述来说,sqlite简直太好用了。
但是呢,有优点必定伴随着缺点:
◇并发
SQLite的锁机制是粗粒度的,它允许多个读,但是一次只允许一个写。
写锁会在写期间排他地锁定数据库,其他人在此期间不能访问数据库。
SQLite已经采取措施以最小化排它锁所占用的时间。
通常来讲,SQLite中的锁只保持几毫秒。
但是按照一般经验,如果您的应用程序有很高的写并发(许多连接竞争向同一数据库写),并且是时间关键型,您可能需要其他数据库。
◇SQL标准支持不全
在它的官方网站上,具体列举了不支持哪些SQL92标准。我个人感觉比较不爽的是不支持外键约束。
◇网络文件系统(以下简称NFS)
有时候需要访问其它机器上的SQLite数据库文件,就会把数据库文件放置到网络共享目录上。这时候你就要小心了。当SQLite文件放置于NFS时,在并发读写的情况下可能会出问题(比如数据损坏)。原因据说是由于某些NFS的文件锁实现上有Bug。
适应场景
1:嵌入式设备 手机,机顶盒,电视,游戏,照相机,手表,厨房电器,汽车,机床,飞机,遥感器,无人机,医疗器械,机器人 2:应用文件格式 桌面应用,如版本控制系统,财物分析工具,媒体编辑,CAD 3:网站 中等流量网站 4:数据分析 5:缓存应用数据 把数据缓存在本地,避免网络传输 6:文件归档 7:替换专用磁盘文件 8:临时数据库 9:在DEMO或测试时代替企业级数据库 10:教育和培训 |
最后在介绍一款sqlite的可视化软件:DB Browser for SQLite
通过上面这个软件,我们可以实现轻松的sqlite数据库管理。而且是免费的哦!