在很多项目中都有使用到SQLite数据库作为数据存储的工具,其中包括一些桌面图形界面程序和线上的Web应用程序。
至今为止,它们都运行良好,SQLite没有对他们带来任何速度和效率方面的问题。
很多人一听到SQLite数据库,就觉得这是一个很低级,效率很低的数据库,从某方面来说其确实如此。
但是就像抛开剂量谈毒性都是耍流氓一样,抛开应用场景谈一个技术或产品的优劣,也是耍流氓。
今天,州的先生结合SQLite官网的说明和自己实际的开发体验,谈谈SQLite,方便大家对SQLite有一个更好的了解。
一、SQLite有哪些特点?
- 无需进行管理和配置,下载就可以用,
- 完整的SQL功能支持,包含SQL的高级功能,比如部分索引、JSON、窗口函数、表达式等等;
- 数据库存储在单机单文件,一个.sqlite文件就包含了SQLite数据库所有的东西,迁移、调试和测试的时候简直不要太方便;
- 支持千兆字节大小的数据库文件;
- 代码的占用量少;
- API简单易用;
- 快速,在某些情况下甚至比直接进行文件IO要快;
- 自包含,没有任何外部依赖,新手最愁的就是一个软件有各种依赖性了,sqlite不需要为数据库的安装、配置、依赖性发愁;
- 跨平台,Windows、Mac、Linux、Android、IOS……常见的开发平台、应用平台上都能使用;
- 开源且免费;
- 拥有独立的命令行界面,可用于管理SQLite数据库;
- ……
二、SQLite适用于哪些场景?
1、嵌入式设备和物联网设备
因为SQLite数据库不需要进行管理和维护,因此不需要额外的数据库运维人员来管理、维护和支持。所以非常适合在手机、机顶盒、游戏机、照相机等单机和移动设备中使用,用来存储设备的数据。
2、应用程序的磁盘文件格式
基于sqlite单文件的特点,其很适合用来作为桌面应用程序和移动应用程序的磁盘文件存储格式。就像在嵌入式设备中的应用一样,sqlite可以在应用程序中作为程序内容的本地存储文件,既方便操作,效率也高;像很多的手机APP也是使用Sqlite作为其静态数据的存储介质。下图就是手机淘宝APP里面一个sqlite文件。
3、网站
对于大多数低流量的网站来说,SQLite可以很好地支撑其数据服务。按照SQLite官网的说法,保守估计,在任何每天点击量少于10万的网站上,SQLite都不会是其访问的瓶颈。同时,SQLite官网亦提及,多个进程可以同时打开同一个数据库,多个进程可以同时执行SELECT,但是,在任何时候,只有一个进程可以对数据库进行更改。也就是说,如果你的网站主要是一个展示类型的网站,没有大并发、访问者不会密集地提交数据,基本上,SQLite是没问题的。
当然,对于现在没有高并发、承担不了千万级别的流量都不好意思拿上台面说的行情,只能自个儿偷偷用了。
4、数据分析
很多做数据分析的人接触到的数据一般有两种,文件类型(比如CSV,XLSX等)和数据库类型。
对于文件类型的数据,要是数据量小,可能就直接在Excel中一顿操作出结果了,但是如果数据量大,用Excel打开和加载就是一个比较费时间的事情。(曾经,一个同事就手握数个几兆和十几兆的CSV文件,在Excel里面关联数据进行查询计算,电脑直接卡得半个小时动一下。)这种情况下,将CSV文件的数据导入到SQLite中,然后用SQL进行数据分析就比较好。
5、教育和学习SQL
在大学期间,我们的数据库学习的是SQLServer 2005,当时老师专门腾了一节课的时间让我们在自己的电脑上下载和安装它。结果很多同学的电脑,死活就是安装不了,无奈只能和别的同学共用一台电脑来练习。
对SQLite来说,这种情况就不会出现,因为其安装简单、单文件的特点,学生可以很快地使用其学习SQL,并且可以方便地将数据库文件进行分享和传输。
三、SQLite不适合于哪些场景?
1、高并发和写密集型网站和应用
前面说了,SQLite适合于高查询、低写入类型地网站,如果一个网站有非常多地写操作,那SQLite就不再适合它了。SQLite支持无限数量的同时读取,但是在任何时候都只允许一个写入,虽然可以排队,但是无法应对网站高并发的要求。
除了网站,依赖网络来传输数据的B/S架构的桌面应用程序和移动应用程序也在此列。
2、大型地数据集
据SQLite官网说明,SQLite数据库的大小限制在140TB,对于更大型的数据,将其进行分布式存储无疑是更好的选择。
四、最后
所以,如果你的项目没有很高的并发、没有密集的写入、数据量不是超级大,数据库和数据库引擎不需要分离,那就放心的使用SQLite这个小巧好用的数据库吧!