SQLite的简单介绍

2,213 阅读11分钟

PS1:后续项目开发可能会用到SQLite,做了一定单的学习整理,分享出来,继续努力!


一、SqLite是什么?

官方译文:

SQLite是由C语言开发的一款轻量型的嵌入式数据库,实现了一个 自给自足的,无服务器, 零配置, 事务性 的SQL数据库引擎。SQLite的代码是开源的,因此可以免费用于任何目的,无论是商业目的还是私人目的。目前在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。

SQLite是嵌入式SQL数据库引擎。与大多数其他SQL数据库不同,SQLite没有单独的服务器进程,可以按应用程序需求进行静态或动态连接。SQLite直接读取和写入普通磁盘文件,具有多个表,索引,触发器和视图的完整SQL数据库包含在单个磁盘文件中 ,比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。

数据库文件格式是跨平台的,能够支持Windows/Linux/Unix/Android/IOS等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口。

SQLite 是目前被运行的最为广泛(没有之一)的数据库引擎,几乎每一个 iOS App / Android App / Chrome / Firefox 都带了一个 SQLite 的引擎用以解决自身的关系型数据存取。CovenantSQL 也是使用 SQLite3 作为单机的存储引擎。 (注:CovenantSQL 是应用区块链技术构建的去中心化 SQL 云数据库,结合了区块链、共享经济、分布式数据库的优势,保障用户隐私及对数据的所有权。)

官方摘要:

  • 功能齐全的SQL
  • 数十亿次部署
  • 单文件数据库
  • 开源代码
  • 所有源代码都在一个文件中(sqlite3.c)
  • 程序体积小
  • 理论存储大小:140 TB (2 47字节)
  • 最大写入大小:1 GB
  • 比直接文件I / O更快
  • 严格的程序质量和测试
  • 零配置
  • ACID交易,即使断电后
  • 稳定,持久的文件格式
  • 详尽的详细文档
  • 官方长期支持

二、SQLite的特点

官方文档:

  SQLite不能直接与客户端/服务器的SQL数据库引擎(如MySQL、Oracle、PostgreSQL或SQL server)进行比较,因为SQLite试图解决一个不同的问题。客户机/服务器SQL数据库引擎努力实现企业数据的共享存储库。它们强调可伸缩性、并发性、集中化和控制。SQLite努力为各个应用程序和设备提供本地数据存储。SQLite强调经济、效率、可靠性、独立性和简单性。SQLite不与客户机/服务器数据库竞争。SQLite与fopen()竞争。 (也有微软的Access等)

注: fopen()是一个C语言函数,用于打开文件,进行各种操作的函数,类似于python里面的open;

官方给出SQLite的使用建议:

  • 数据是否通过网络与应用程序分离?→选择客户端/服务器
  • 多个并发作者?→选择客户/服务器
  • 大数据?→选择客户端/服务器
  • 其他→选择SQLite!

选择SQLite有许多理由,主要是以下:

安装:无需进行管理和配置,下载就可以用,自包含,没有任何外部依赖,新手最愁的就是一个软件有各种依赖性了,sqlite不需要为数据库的安装、配置、依赖性发愁;。

性能:完整的SQL功能支持,包含SQL的高级功能,比如部分索引、JSON、窗口函数、表达式等等;并且 SQLite在执行数据库操作的时候要比诸如MySQL和 PostgreSQL等自由数据库高效和快速。

大小: SQLite有很小的需要很少的内存,并且访问数据库只需要一个单独的库文件,这些使它成为嵌入式数据库应用的理想选择。

可移植性: 无需设置或管理,SQLite可以在很多平台上运行,并且他的数据库可以在没有客户端/服务器设置 和管理不间断的情况下进行移植,数据库存储在sqlite3单机单文件,一个.sqlite文件就包含了SQLite数据库所有的东西,迁移、调试和测试的时候简直不要太方便;。

稳定性: SQLite遵从不可分割性原则,符合所有的四个标准原子性,一致性,隔离性,和耐久性。 的一个大的子集工具,包括视图,子查询和触发器。

接口: SQLite是用ANSI-C编写的,提供简单易用的API。 SQLite为大多数的编程语言提供了API。 例如:.Net语言(Visual Basic,C#),PHP,Java,Objective C,Python和许多其他编程语言提供了相应的API。

费用: SQLite 是开源的,因此可以任意的自由使用它而不需要付费,并且可以自由的重新发布。

支撑: SQLite是无服务器的:SQLite不需要服务器进程或系统来操作。

灵活性: SQLite非常灵活:它可以在同一个会话上同时处理多个数据库

跨平台: 除了在大多数平台,如Windows,Mac OS,Linux和Unix。 它也可以用于许多嵌入式操作系统,如Symbian,Android和Windows CE上使用。

存储数据:SQLite提供了一种有效的数据存储方式。

应用平台: SQLite在UNIX(Linux,Mac OS-X,Android,iOS)和Windows(Win32,WinCE,WinRT)上均可用。

三、SQLite的应用场景分析

SQLite的适合场景:

1、嵌入式设备和物联网设备

因为SQLite数据库不需要进行管理和维护,因此不需要额外的数据库运维人员来管理、维护和支持。所以非常适合在手机、机顶盒、游戏机、照相机等单机和移动设备中使用,用来存储设备的数据,在未来的物联网应用场景中应该很前途。

2、应用程序的磁盘文件格式

基于sqlite单文件的特点,其很适合用来作为桌面应用程序和移动应用程序的磁盘文件存储格式。就像在嵌入式设备中的应用一样,sqlite可以在应用程序中作为程序内容的本地存储文件,既方便操作,效率也高;像很多的手机APP也是使用Sqlite作为其静态数据的存储介质。

3、网站(小型,低并发)

对于大多数低流量的网站来说,SQLite可以很好地支撑其数据服务。按照SQLite官网的说法,保守估计,在任何每天点击量少于10万(99.9%)的网站上,SQLite都不会是其访问的瓶颈。同时,SQLite官网亦提及,多个进程可以同时打开同一个数据库,多个进程可以同时执行SELECT,但是,在任何时候,只有一个进程可以对数据库进行更改。也就是说,如果你的网站主要是一个展示类型的网站,没有大并发、访问者不会密集地提交数据,基本上,SQLite是没问题的。 当然,对于现在没有高并发、承担不了千万级别的流量都不好意思拿上台面说的行情,只能自个儿偷偷用了。

4、数据分析

很多做数据分析的人接触到的数据一般有两种,文件类型(比如CSV,XLSX等)和数据库类型。 对于文件类型的数据,要是数据量小,可能就直接在Excel中一顿操作出结果了,但是如果数据量大,用Excel打开和加载就是一个比较费时间的事情。(曾经,一个同事就手握数个几兆和十几兆的CSV文件,在Excel里面关联数据进行查询计算,电脑直接卡得半个小时动一下。)这种情况下,将CSV文件的数据导入到SQLite中,然后用SQL进行数据分析就比较好。

5、教育和学习SQL

对SQLite来说,这因为其安装简单、单文件的特点,学生可以很快地使用其学习SQL,并且可以方便地将数据库文件进行分享和传输。

SQLite不适合于哪些场景

1、写密集型网站和应用

SQLite适合于高查询、低写入类型地网站,如果一个网站有非常多地写操作,那SQLite就不再适合它了。SQLite支持无限数量的同时读取,但是在任何时候都只允许一个写入,虽然可以排队,但是无法应对网站高并发的要求。SQLite通常情况下用作一个网站的后台数据库可以很好的工作. 但是如果你的网站的访问量大到你开始考虑采取分布式的数据库部署, 那么你应当毫不犹豫的考虑用一个企业级的客户端/服务器数据库来替代SQLite.

2、大型地数据集

据SQLite官网说明,SQLite数据库的大小限制在140TB,对于更大型的数据,将其进行分布式存储无疑是更好的选择。当你在SQLite中开始一个事务处理的时候(事务处理会在任何写操作发生之前产生, 而不是必须要显示的调用BEGIN...COMMIT), 数据库引擎将不得不分配一小块脏页(文件缓冲页面)来帮助它自己管理回滚操作. 每1MB的数据库文件SQLite需要256字节. 对于小型的数据库这些空间不算什么, 但是当数据库增长到数十亿字节的时候, 缓冲页面的尺寸就会相当的大了. 如果你需要存储或修改几十GB的数据, 你应该考虑用其他的数据库引擎.

3、客户端/服务器程序

依赖网络来传输数据的B/S架构的桌面应用程序和移动应用程序。 如果你有许多的客户端程序要通过网络访问一个共享的数据库, 你应当考虑用一个客户端/服务器数据库来替代SQLite. SQLite可以通过网络文件系统工作, 但是因为和大多数网络文件系统都存在延时, 因此执行效率不会很高. 此外大多数网络文件系统在实现文件逻辑锁的方面都存在着bug(包括Unix 和windows). 如果文件锁没有正常的工作, 就可能出现在同一时间两个或更多的客户端程序更改同一个数据库的同一部分, 从而导致数据库出错. 因为这些问题是文件系统执行的时候本质上存在的bug, 因此SQLite没有办法避免它们. 好的经验告诉我们, 应该避免在许多计算机需要通过一个网络文件系统同时访问同一个数据库的情况下使用SQLite.

4、高并发访问

SQLite对于整个数据库文件进行读取/写入锁定. 这意味着如果任何进程读取了数据库中的某一部分, 其他所有进程都不能再对该数据库的任何部分进行写入操作. 同样的, 如果任何一个进程在对数据库进行写入操作, 其他所有进程都不能再读取该数据库的任何部分. 对于大多数情况这不算是什么问题. 在这些情况下每个程序使用数据库的时间都很短暂, 并且不会独占, 这样锁定至多会存在十几毫秒. 但是如果有些程序需要高并发, 那么这些程序就需要寻找其他的解决方案了.

四、SQLite 安装

SQLite 的一个重要的特性是零配置的,这意味着不需要复杂的安装或管理。本文以Windows环境为例。 Linux 和 Mac OS X 上的安装设置请查看 www.runoob.com/sqlite/sqli…

请访问 SQLite 下载页面,从 Windows 区下载预编译的二进制文件。

您需要下载 sqlite-tools-win32-.zip 和 sqlite-dll-win32-.zip 压缩文件。 创建文件夹 C:\sqlite,并在此文件夹下解压上面两个压缩文件,将得到 sqlite3.def、sqlite3.dll 和 sqlite3.exe 文件。 添加 C:\sqlite 到 PATH 环境变量(记得前面加;好),最后在命令提示符下,使用 sqlite3 命令,将显示如下结果。

PS2:至此,SQLite的基本理解和学习安装已完成,比较仓促,不足之处,请大家畅所欲言,积极指正!

PS3:后续后记录SQLite的建库,建表,增删改查操作,以及可视化工具的使用分享,请大家多多支持哈,点个赞,给点动力!