【牛角书】什么时候使用SQLite?SQLite的优缺点分析

发布于:2023-02-04 ⋅ 阅读:(717) ⋅ 点赞:(0)

一.SQLite简介

SQLite 是一个功能强大的嵌入式关系数据库管理系统,采用紧凑的C库,由 D. Richard Hipp开发。它提供对 SQL92 的一个大子集、多个表和索引、事务、视图、触发器以及大量客户端接口和驱动程序的支持。该库是自包含的,并在不到25,000行 ANSIC中实现,可免费用于任何目的。它快速、高效且可扩展,可在从 ARM/Linux 到 SPARC/Solaris 的各种平台和硬件架构上运行。

二.SQLite的优点

  1. 轻量级:SQLite是被设计成轻量级,自包含的。一个头文件,一个lib库,你就可以使用关系数据库了,不用任何启动任何系统进程。一般来说,整个SQLite库小于225KB。在电脑,手机,相机,家用电子设备等设备的嵌入式软件是非常好的选择。
  2. 零配置:SQLite3核心引擎不依赖第三方软件,不用安装,不用配置,不用启动,关闭或者配置数据库实例。当系统崩溃后不用做任何恢复操作,再下次使用数据库的时候自动恢复。
  3. 单一磁盘文件:SQLite的数据库被存放在文件系统的单一磁盘文件内,只要有权限便可随意访问和拷贝,这样带来的主要好处是便于携带和共享。其他的数据库引擎,基本都会将数据库存放在一个磁盘目录下,然后由该目录下的一组文件构成该数据库的数据文件。尽管我们可以直接访问这些文件,但是我们的程序却无法操作它们,只有数据库实例进程才可以做到。这样的好处是带来了更高的安全性和更好的性能,但是也付出了安装和维护复杂的代价。
  4. 跨平台/可移植性:它是运行在Windows,Linux,BSD,Mac OS X和一些商用Unix系统,比如Sun的Solaris,IBM的AIX,同样,它也可以工作在许多嵌入式操作系统下,比如QNX,VxWorks,Palm OS, Symbin和Windows CE。
  5. 提供简单、易于使用的API:SQLite 有一个非常易于使用的 API,只需要三个函数来执行 SQL 和检索数据。它是可扩展的,允许程序员以 C 回调的形式定义自定义函数和聚合。C API 是脚本接口的基础,其中之一(Tcl 接口)包含在发行版中。开源社区已经开发了大量其他客户端接口、适配器和驱动程序,使得在其他语言和库中使用 SQLite 成为可能。
  6. 数据存储高效:当您需要存储文件存档时,SQLite可以生成较小数据量的存档,并且包含常规ZIP存档的大量元数据。
  7. 数据查询简单:可以将数据加载到SQLite内存数据库中,并随时提取数据,也可以按照想要的方式提取数据。

三.SQLite的缺点

  1. 并发访问的锁机制:SQLite的锁机制是粗粒度的,它允许多个读,但是一次只允许一个写。写锁会在写期间排他地锁定数据库,其他人在此期间不能访问数据库。SQLite已经采取措施以最小化排它锁所占用的时间。通常来讲,SQLite中的锁只保持几毫秒。但是按照一般经验,如果您的应用程序有很高的写并发(许多连接竞争向同一数据库写),并且是时间关键型,您可能需要其他数据库。
  2. 网络问题:有时候需要访问其它机器上的SQLite数据库文件,就会把数据库文件放置到网络共享目录上。这时候你就要小心了。当SQLite文件放置于NFS时,在并发读写的情况下可能会出问题(比如数据损坏)。原因据说是由于某些NFS的文件锁实现上有Bug。

四.什么时候使用SQLite

  1. 嵌入式应用:所有需要迁移性,不需要扩展的应用,例如,单用户的本地应用、移动应用和游戏。
  2. 代替磁盘访问:在很多情况下,需要频繁直接读/写次哦按文件的应用,都很适合转为使用SQLite,可以得益于SQLite使用SQL带来的功能性和简洁性。
  3. 测试:可以秒杀大部分专门针对应用业务逻辑(也就是应用的主要目的:能完成功能)的测试。

五.什么不时候使用SQLite

  1. 多用户应用:如果你在开发的应用需要被多用户访问,而且这些用户都用同一个数据库,那么相比SQLite最好还是选择一个功能完整的关系型数据库(例如:MySQL)。
  2. 需要大面积写入数据的应用:SQLite的缺陷之一就是它的写入操作,这个数据库同一时间只允许一个写操作,因此吞吐量有限。
本文含有隐藏内容,请 开通VIP 后查看