大多数SQL数据库引擎都是作为单独的服务器进程实现的。想要访问数据库的程序使用某种进程间通信(通常是TCP / IP)与服务器通信,以将请求发送到服务器并接收回结果。SQLite无法以这种方式工作。使用SQLite,要访问数据库的进程直接从磁盘上的数据库文件读取和写入。没有中间服务器进程。
无服务器具有优点和缺点。主要优点是,没有安装,设置,配置,初始化,管理和故障排除的单独服务器进程。这就是SQLite是“零配置”数据库引擎的原因之一。使用SQLite的程序在运行之前不需要任何管理支持即可设置数据库引擎。任何能够访问磁盘的程序都可以使用SQLite数据库。
另一方面,使用服务器的数据库引擎可以为客户端应用程序中的错误提供更好的保护-客户端中的杂散指针不能破坏服务器上的内存。并且由于服务器是单个持久性进程,因此它能够更精确地控制数据库访问,从而实现更细粒度的锁定和更好的并发性。
大多数SQL数据库引擎都是基于客户端/服务器的。在无服务器的那些中,SQLite是该作者唯一已知的一种,它允许多个应用程序同时访问同一数据库。
(本节于2018-04-02添加)
最近,人们开始使用“无服务器”一词来表示与本文档中的预期含义有细微差别的内容。这是“无服务器”的两个可能的定义:
经典的无服务器版: 数据库引擎在与应用程序相同的进程,线程和地址空间中运行。没有消息传递或网络活动。
Neo-Serverless: 数据库引擎在与应用程序不同的名称空间中运行,可能在不同的计算机上,但是数据库由托管服务提供商作为交钥匙服务提供,不需要应用程序所有者的管理或管理,并且如此易于使用,以至于开发人员可以认为数据库确实是无服务器的,即使它确实在后台使用了服务器。
SQLite是经典的无服务器数据库引擎的示例。使用SQLite,没有其他进程,线程,机器或其他机制(主机OS和文件系统除外)可帮助提供数据库服务或实现。确实没有服务器。
Microsoft Azure Cosmo DB 和 Amazon S3 是无服务器新数据库的示例。这些数据库由在云中单独运行的服务器进程实现。但是服务器是由ISP而不是由应用程序开发人员维护和管理的。应用程序开发人员仅使用该服务。开发人员不必设置,配置或管理数据库服务器实例,因为所有这些工作都是由服务提供商自动处理的。数据库服务器实际上确实存在,它们只是对开发人员隐藏。
重要的是要理解“无服务器”的这两种不同的定义。当数据库声称是“无服务器”时,请确保辨别它们是“经典无服务器”还是“新服务器无”。