SQLite是一种经典的无服务器Serverless


大多数SQL数据库引擎都是以单独的服务器进程提供外部访问,外部客户端想要访问数据库,就需要与服务器进程通信(通常是TCP / IP),这样可以将请求发送到服务器并接收回数据库服务器处理的结果。SQLite却无法以这种方式工作。使用SQLite,如果想要访问数据库,只能直接从磁盘上的数据库文件读取和写入。SQLite没有服务器进程。

无服务器具有优点和缺点。
主要优点是无需安装、设置、配置、初始化、管理单独服务器进程。这就是SQLite是“ 零配置 ”数据库引擎的原因之一。使用SQLite的程序在运行之前不需要任何管理支持即可设置数据库引擎。任何能够访问磁盘的程序都可以使用SQLite数据库。
另一方面缺点是:使用服务器进程的数据库引擎能够提供更好的保护,以防止客户端应用程序中的错误-客户端中的杂散指针就无法破坏服务器上的内存。而且由于服务器是单个持久性进程,因此它能够更精确地控制数据库访问,从而实现更细粒度的锁定和更好的并发性。
大多数SQL数据库引擎都是基于客户端/服务器的。在无服务器的数据库中,SQLite是唯一已知的一种,它允许多个应用程序同时访问同一数据库。

经典的无服务器与新无服务器
近来,人们开始使用“无服务器”一词来表示与本文档中的预期含义略有不同的内容。这是“无服务器”的两个可能的定义:

  1. 经典无服务器: 数据库引擎在与应用程序相同的进程、线程和地址空间中运行。没有消息传递或网络活动。
  2. Neo-Serverless新无服务器: 数据库引擎在与应用程序不同的命名空间中运行,可能在另一台计算机上,但是数据库由托管提供程序作为交钥匙服务提供,不需要应用程序所有者进行管理或管理,并且如此易于使用,以至于开发人员可以认为数据库确实是无服务器的,即使它确实在后台使用了服务器。

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

Microsoft Azure Cosmo DB 和 Amazon S3 是新的无服务器数据库的示例。这些数据库由在云中单独运行的服务器进程实现。但是服务器是由ISP而非应用程序开发人员维护和管理的。应用程序开发人员仅使用该服务。开发人员不必设置,配置或管理数据库服务器实例,因为所有这些工作都是由服务提供商自动处理的。数据库服务器实际上确实存在,它们只是对开发人员隐藏。
了解“无服务器”的这两种不同定义很重要。当数据库声称是“无服务器”时,请确保辨别它们是“经典无服务器”还是“新无服务器”。