SQLite 是无服务器的

1. SQLite 是无服务器的

大多数 SQL 数据库引擎都是作为单独的服务器进程实现的。想要访问数据库的程序使用某种进程间通信(通常是 TCP/IP)与服务器通信,以向服务器发送请求并接收返回结果。SQLite 不是这样工作的。使用 SQLite,想要访问数据库的进程直接从磁盘上的数据库文件读取和写入。没有中间服务器进程。

无服务器有优点也有缺点。主要优点是没有单独的服务器进程来安装、设置、配置、初始化、管理和故障排除。这就是 SQLite 是“零配置”数据库引擎的原因之一。使用 SQLite 的程序在运行前不需要管理支持来设置数据库引擎。任何能够访问磁盘的程序都能够使用 SQLite 数据库。

另一方面,使用服务器的数据库引擎可以更好地防止客户端应用程序中的错误 - 客户端中的杂散指针不会破坏服务器上的内存。而且因为服务器是一个单一的持久进程,它能够更精确地控制数据库访问,允许更细粒度的锁定和更好的并发性。

大多数 SQL 数据库引擎都是基于客户端/服务器的。在那些无服务器的数据库中,SQLite 是作者所知的唯一一个允许多个应用程序同时访问同一个数据库的数据库。

2.经典无服务器与。新无服务器

(此部分于 2018-04-02 添加)

最近,人们开始使用“无服务器”一词来表示与本文档中的预期含义略有不同的含义。以下是“无服务器”的两种可能定义:

  1. 经典无服务器: 数据库引擎在与应用程序相同的进程、线程和地址空间中运行。没有消息传递或网络活动。

  2. Neo-Serverless: 数据库引擎在独立于应用程序的命名空间中运行,可能在单独的机器上运行,但数据库由托管提供商作为交钥匙服务提供,不需要应用程序所有者的管理或管理,并且是如此易于使用,以至于开发人员可以将数据库视为无服务器的,即使它确实在幕后使用了服务器。

SQLite 是经典无服务器数据库引擎的示例。使用 SQLite,没有其他进程、线程、机器或其他机制(除了主机操作系统和文件系统)来帮助提供数据库服务或实现。真的没有服务器。

Microsoft Azure Cosmo DBAmazon S3 是新无服务器数据库的示例。这些数据库由在云端单独运行的服务器进程实现。但服务器由 ISP 维护和管理,而不是由应用程序开发人员维护和管理。应用程序开发人员只是使用该服务。开发人员不必提供、配置或管理数据库服务器实例,因为所有这些工作都由服务提供商自动处理。数据库服务器确实存在,它们只是对开发人员隐藏了。

理解“无服务器”的这两个不同定义很重要。当数据库声称是“无服务器”时,请务必辨别它们是指“经典无服务器”还是“新无服务器”。