欢迎来到客户端-服务器数据库!

在本章中,我们将探讨大型数据库如何同时处理成千上万名用户的需求。无论你是在预订演唱会门票,还是查看银行余额,你都在使用客户端-服务器数据库 (Client-server database)。我们将学习这些系统的运作原理,以及更重要的一点:当所有人同时按下“保存”按钮时,它们是如何防止数据变得混乱的。如果一开始觉得这些概念有点技术性,别担心,我们会把它拆解成容易理解的小部分!

1. 什么是客户端-服务器数据库?

在简单的数据库中,可能只有一个人会在电脑上使用一个文件。但在现实世界中,许多人需要同时查看并修改相同的信息。客户端-服务器数据库系统能够为多个客户端 (multiple clients) 提供对中央数据库的同步存取 (simultaneous access)

把它想象成一间专业的厨房: 服务器 (Server) 就像行政总厨,留在厨房里管理储藏室(数据库)。客户端 (Clients) 就像服务生(应用程序或用户),他们送出食物订单(请求)。多个服务生可以同时送出订单,而总厨必须确保储藏室不会在没注意的情况下耗尽食材!

重点复习:
客户端 (Client): 发出数据请求的应用程序或用户。
服务器 (Server): 存储数据库并处理请求的强大计算机。
同步存取 (Simultaneous Access): 许多人同时使用同一个数据库。

2. 问题所在:并发存取 (Concurrent Access)

当多个用户在完全相同的时间试图更改同一笔数据时,这被称为并发存取。这会导致一个著名的问题,称为丢失更新 (lost update)

想象一下这个情境:
1. 用户 A 和用户 B 都看到网店剩下最后 1 双鞋。
2. 用户 A 按下“购买”。他们的电脑显示“原本有 1 双,现在变成 0 双”。
3. 在同一微秒内,用户 B 也按下“购买”。他们的电脑同样看到原本有 1 双,所以也显示“原本有 1 双,现在变成 0 双”。
4. 两次更新都被保存了。商店卖出了 2 双鞋,但库存只有 1 双!其中一个更新“覆盖”了另一个,从而导致了丢失更新

关键结论: 若没有管理并发存取的方法,数据库就会失去其完整性 (integrity)(变得不准确且不可靠)。

3. 如何管理并发存取

为了确保数据安全,服务器必须使用“并发控制”。AQA 考试大纲要求你掌握以下四种主要方法:

方法 A:记录锁定 (Record Locking)

这是最常用的方法。当用户开始编辑一个记录 (record)(表格中的一行)时,服务器会将其“锁定”。在该用户完成之前,没有其他人可以编辑那条记录。

比喻:这就像公厕的隔间。一旦你进去并锁上门,在你离开之前,没有其他人可以进来。

风险:死锁 (Deadlock)
有时候,用户 1 锁定了记录 A,并等待记录 B;与此同时,用户 2 锁定了记录 B,并等待记录 A。他们两人都会永远卡住!这就称为死锁

方法 B:序列化 (Serialisation)

序列化确保交易是按顺序处理,而不是重叠进行的。即使请求几乎在同时到达,服务器也会强迫它们进入队列,这样第二个交易只有在第一个交易完全完成后才能开始。

方法 C:时间戳顺序 (Timestamp Ordering)

每次交易开始时,都会获得一个时间戳 (timestamp)(它到达的确切时间)。如果有两个用户试图更改相同的数据,服务器会查看时间戳,时间较早的人优先。如果一个较晚的交易试图存取一个较早的交易正在使用的数据,系统通常会通知较晚的交易等待或重新启动。

比喻:就像在熟食柜台拿号码牌一样。无论你喊得多大声都没用,号码最小的人会先被服务。

方法 D:提交顺序 (Commitment Ordering)

这种方法会检视整个“交易”,并根据它们对彼此的影响,决定存储(提交)它们的最佳顺序。它确保如果一个交易依赖于另一个交易,它们会以不违反数据库规则的顺序完成。

你知道吗?
在高速银行系统中,这些决定是在毫秒内完成的!数据库管理员必须选择正确的方法,以平衡速度安全性

总结与记忆小撇步

要记住控制并发存取的四种方法,只需记住 L.S.T.C.

L - 记录锁定 (Record Locks)
S - 序列化 (Serialisation)
T - 时间戳顺序 (Timestamp Ordering)
C - 提交顺序 (Commitment Ordering)

记忆口诀: "Large Servers Treat Clients"(大型服务器对待客户端)

考试重点:
• 客户端-服务器数据库允许多位用户同时使用。
并发存取会导致丢失更新(造成数据完整性问题)。
记录锁定防止他人在记录“使用中”时进行编辑。
序列化时间戳顺序提交顺序是保持数据井然有序且安全的替代方案。