1

我会给你一些背景知识,因为我认为没有它我的问题就不清楚。除此之外,我对服务器知之甚少,但我认为由于背景信息,我实际上在问什么会变得很清楚。

我正在/正在构建一个仅供我自己使用的小型 C++ 程序(一个家庭作业管理器,它需要跟踪任务,因此它依赖于任务和子任务,并且需要多个表等),所以我认为我需要一个数据库。我很快偶然发现了 SQLite,它在很多方面都非常适合我的情况:-它是免费的,-它只使用可以被任何软件解释的 .db 文件,-它可以嵌入,-它很简单(在文档和库),最重要的是:-SQLite.org 将其描述为“无服务器”

但是,我发现 SQLite 的动态类型系统非常烦人(“为什么”不是重点;我可能会发表单独的帖子来询问有关此的问题),我决定寻找一个 rdbms,它具有我上面提到的所有优点,但也具有静态类型.

在寻找满足我需要的 rdbms 的兔子洞时,我遇到了许多术语,这些术语都与术语“服务器”等有关 rdbms 的实现方式有关。所有的术语都非常模糊,一个词并不意味着每个实例都相同。

我注意到在搜索过程中出现了所有这些关键字和对比:

  • 独立与服务器/客户端
  • 嵌入式与...“未嵌入”,我猜(?)
  • 经典无服务器与新无服务器
  • 无服务器......但实际上基于云(我认为云是服务器(?))
  • 服务器与服务
  • 服务与应用
  • 用户与客户

据我所知,服务器是一个在后台执行的进程,不被用户直接使用。但除此之外,所有这些与服务器相关的术语都让我望而却步。

我想要一个具有 SQLite.org 所说的“无服务器”特性的 rdbms。我看到许多专业的免费 SQL RDBMS 提供商谈到了拥有“嵌入式服务器”的能力,其中确实包含“嵌入式”一词,但也包含“服务器”。所以我的问题是:当供应商谈到这些“嵌入式服务器”时,它的真正含义是什么?

这是否意味着有一个应用程序,当它运行时会打开另一个用作服务器的应用程序?当它这样做时,该服务器是服务还是只是另一个普通的类似应用程序的进程?或者,它的工作方式是否与 SQLite 提到的无服务器完全相同,即:已编译项目中的库已经处理了所有只能使用 .db 文件的内容?它是否需要数据库和可执行文件以外的任何文件?应用程序和数据库文件之间的通信是直接来自代码还是使用了其他进程?

(PS:作为一个附带问题:你能帮我弄清楚上面列表中所有术语的确切含义吗?)

我意识到我的问题可能无处不在,但我在这段旅程中遇到的词汇也是如此。我希望你能理解我的困惑来自哪里,并能帮助我弄清楚这些观点。提前致谢。

4

1 回答 1

0

“无服务器”SQLLite 只是意味着它是一个库,并且不在单独的进程中运行。在这方面,它就像 Access/Jet 和其他直接读取和写入文件的旧 DMBS 程序。更常见的术语是“嵌入式数据库”。

如今,“无服务器”更常见的含义是一种基于云的功能,不需要您安装或管理“服务器”或 VM。如“我们使用Azure Functions进行无服务器计算”。

其他DMBS系统通常称为“客户端-服务器 DBMS”,其中 DMBS 在单独的进程中运行,客户端程序通过网络或某种 RPC 机制与其通信。客户端-服务器 RDBMS 系统可以与应用程序“捆绑”或“嵌入”,并且可能不在单独的计算机上运行,​​但仍将在单独的进程中运行。

于 2021-01-30T19:59:57.217 回答