DB 交互:应用程序如何与 DB 对话

发布: (2025年12月30日 GMT+8 00:55)
8 min read
原文: Dev.to

Source: Dev.to

你好,我是 Maneshwar。我正在开发 FreeDevTools online —— 一个免费、开源的中心,开发者可以快速找到并使用开发工具、技巧代码和 TLDR,而无需在互联网上四处搜索。

在上一篇文章中,我们重点讨论了 事务,这种抽象使得数据库在并发和故障情况下仍能保持正确性。我们看到 DBMS 如何保证 原子性隔离性持久性,而应用程序则定义事务要执行的 内容

但这引出了一个实际问题:

应用程序到底是如何与 DBMS 进行交互的,它们又是如何表达想要完成的操作的?

现代数据库系统不再通过操作文件或块来访问。相反,应用程序通过明确的 交互模型语言 与 DBMS 进行交互。理解这一边界至关重要,因为它决定了性能、隔离性、可扩展性,甚至故障行为。

两个数据库交互方面

  1. 交互模型 – 应用程序如何连接并与 DBMS 交换信息。
  2. 交互语言 – 应用程序如何通过 DBMS 定义、查询和修改数据。

这两种选择决定了数据库在实际系统中的构建和使用方式。

Source:

与 DBMS 的交互模型

DBMS 通常采用以下两种交互模型之一:

  • 嵌入式模型
  • 客户端‑服务器模型

每种模型对应不同的系统约束和设计目标。

嵌入式 DBMS 模型

嵌入式模型 中,DBMS 实现为 用户级库,在运行时成为应用程序的一部分。

特点

  • DBMS 代码在应用程序的进程内部运行。
  • 应用程序直接调用 DBMS 函数。
  • 通过普通函数调用进行通信。
  • 所有执行都在单一进程的地址空间内完成。

这实际上是一种 自助式 数据库系统。应用程序通过 API 与 DBMS 交互,就像使用其他库一样。一些嵌入式系统甚至允许应用程序注册 回调函数,当 DBMS 需要在应用程序的内存空间中操作数据时会调用这些函数。

优势与局限

  • 没有独立的服务器进程。
  • 开销极小。
  • 内存占用低。
  • 应用程序与 DBMS 紧密耦合。
  • 并发性和可扩展性受限。

典型使用场景

  • 移动设备
  • 嵌入式系统
  • 资源受限的环境

在这些场景下,运行独立的数据库服务器既不必要也不实际。

客户端‑服务器 DBMS 模型

客户端‑服务器模型 中,DBMS 作为 独立的服务器进程 运行。应用程序充当客户端:

  • 它们 直接执行 DBMS 代码。
  • 只包含一个轻量级的 DBMS 驱动。
  • 通过进程间通信(IPC)与 DBMS 服务器交互。

常见的 IPC 机制

  • TCP/IP 套接字
  • 共享内存
  • 其他操作系统支持的 IPC 机制

客户端发送 请求,服务器执行并将结果作为 响应 返回。

与嵌入式模型的区别

  • 没有回调进入应用代码。
  • DBMS 与应用程序的错误相互隔离。
  • 服务器集中管理并发和事务。

大多数商业和生产级 DBMS 采用此模型,通常被称为 数据库服务器

客户端‑服务器模型为何占主导

  • 应用程序与 DBMS 之间的强隔离。
  • 高并发支持。
  • 集中式事务管理。
  • 更好的故障容限。
  • 可跨机器和网络扩展。

该模型使应用程序的地址空间保持小巧,防止应用程序崩溃导致数据库内部损坏。

Source:

交互语言:工作如何表达

连接到 DBMS 只是故事的一半。应用程序还必须 描述它们希望数据库执行的操作。主要有两种方法。

过程式(规定式)

  • 用户指定每一步 如何 执行。
  • DBMS 在低层次上接受指令。
  • 控制流和执行顺序是显式的。

这种方法将应用程序与执行策略及存储细节紧密耦合。

声明式(描述式)

现代 DBMS 绝大多数使用 声明式语言

  • 用户指定 想要什么
  • DBMS 决定 如何 执行。
  • 执行策略对应用程序隐藏。

这种分离是有意为之且非常强大。

SQL:关系数据库的语言

最广泛使用的关系数据库声明式语言是 结构化查询语言(SQL)

SQL 使应用程序能够:

  • 描述期望的结果。
  • 忽略存储布局。
  • 不必考虑索引、块或访问路径。

每条 SQL 语句:

  • 是一个独立的程序或子程序。
  • 指定 计算什么,而不是 如何 计算。

这种职责划分让:

  • 应用程序开发者专注于正确性和意图。
  • DBMS 开发者专注于优化和执行。

SQL 组件

SQL 定义了:

  • 一套标准的原始数据类型(INTEGER、VARCHAR、DATE、TIMESTAMP、BLOB 等)。
  • 由这些原始类型组成的用户自定义域。
  • 与关系数据交互的语法和语义。

SQL 语句分为两大类。

数据定义语言(DDL)

用于定义数据库结构:

  • 索引
  • 约束
  • 视图
  • 触发器

DDL 形成数据库的 模式(schema) 和完整性规则。

数据操作语言(DML)

用于处理数据:

  • 查询行
  • 插入新行
  • 更新已有行
  • 删除行

DML 语句在事务内部执行,并受 ACID 保证的约束。

资源

FreeDevTools 截图

👉 查看: FreeDevTools

欢迎任何反馈或贡献!它是在线的、开源的,随时供任何人使用。

在 GitHub 上给它加星: freedevtools

Back to Blog

相关文章

阅读更多 »

使用事务让 DB 更改可预测

你好,我是Maneshwar。我正在开发 FreeDevTools(在线)https://hexmos.com/freedevtools,旨在打造一个汇聚所有 dev tools、cheat codes 和 TLDRs 的统一平台——...

RDBMS:关系与文件的交汇

你好,我是Maneshwar。我正在开发 FreeDevTools 在线平台 https://hexmos.com/freedevtools,当前正在构建一个汇集所有 dev tools、cheat codes 和 TLDRs 的一站式平台——...

索引与DBMS的崛起

你好,我是Maneshwar。我正在开发 FreeDevTools online https://hexmos.com/freedevtools,当前正打造一个汇集所有 dev tools、cheat codes 和 TLDRs 的统一平台。