问题描述
我会给你一些背景知识,因为如果没有它,我认为我的问题不清楚。除此之外,我对服务器知之甚少,但我认为由于背景信息,我的实际要求会变得很清楚。
我曾经/正在构建一个仅供我使用的小型 C++ 程序(一个作业管理器,它需要跟踪任务,因此它依赖于任务和子任务并需要多个表等),所以我想我需要一个数据库。我很快偶然发现了 sqlite,它在很多方面都非常适合我的情况: - 它是免费的, - 它只使用可以被任何软件解释的 .db 文件, - 它可以嵌入, - 它很简单(在文档和库),最重要的是:-it is what SQLite.org describes as 'serverless'。
但是,我发现 sqlite 的动态类型系统非常烦人(“为什么”不重要;我可能会单独发帖询问有关此问题的问题),因此我决定寻找一个 rdbms,它具有我上面提到的所有优点,但也有具有静态类型。
在寻找适合我需要的 rdbms 的这个兔子洞中,我遇到了许多术语,这些术语都与 rdbms 如何实现有关,如“服务器”等术语。所有术语都非常含糊,一个词的含义并不相同。
我注意到在搜索过程中出现了所有这些关键字和对比:
- 独立与服务器/客户端
- 嵌入与...“未嵌入”,我猜(?)
- 经典无服务器与新无服务器
- 无服务器......但实际上是基于云的(我认为云是服务器(?))
- 服务器与服务
- 服务与应用程序
- 用户与客户
据我所知,服务器是在后台执行的进程,用户不能直接使用。但除此之外,所有这些与服务器相关的术语都让我望而却步。
我想要一个具有 sqlite.org 所说的“无服务器”特性的 rdbms。我看到许多专业的免费 sql RDBMS 提供者谈到了拥有“嵌入式服务器”的能力,其中确实包含“嵌入式”一词,但也包含“服务器”。 所以我的问题是:当提供商谈到这些“嵌入式服务器”时,它的真正含义是什么?
这是否意味着有一个应用程序,当它运行时它会打开另一个用作服务器的应用程序?当它这样做时,该服务器是服务还是只是另一个正常的类似应用程序的进程?或者,它的工作方式是否与 sqlite 提到的无服务器服务完全相同,即:已编译项目中的库已经处理了所有仅适用于 .db 文件的内容?除了数据库和可执行文件之外,它是否需要任何文件?应用程序和数据库文件之间的通信是直接来自代码还是使用了其他过程?
(PS:作为一个附带问题:你能帮我弄清楚上面列表中的所有术语的确切含义吗?)
我意识到我的问题可能到处都是,但我在这次旅程中遇到的词汇也是如此。我希望你能理解我的困惑来自哪里,并能帮助我澄清这些观点。提前致谢。
解决方法
“无服务器”SQLLite 只是意味着它是一个库,而不是在单独的进程中运行。在这方面,它就像 Access/Jet 和其他直接读写文件的旧 DMBS 程序。对此更常用的术语是“embedded database”。
如今,“无服务器”的更常见含义是一种基于云的功能,不需要您安装或管理“服务器”或虚拟机。如“我们使用 Azure Functions 进行无服务器计算”。
其他 DMBS 系统通常称为“客户端-服务器 DBMS”,其中 DMBS 在单独的进程中运行,客户端程序通过网络或某些 RPC 机制与其通信。客户端-服务器 RDBMS 系统可以与应用程序“捆绑”或“嵌入”,并且可能不会在单独的计算机上运行,但仍会在单独的进程中运行。