欢迎来到客户端-服务器数据库!
在本章中,我们将探讨大型数据库如何同时处理成千上万名用户的需求。无论你是在预订演唱会门票,还是查看银行余额,你都在使用客户端-服务器数据库 (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"(大型服务器对待客户端)
考试重点:
• 客户端-服务器数据库允许多位用户同时使用。
• 并发存取会导致丢失更新(造成数据完整性问题)。
• 记录锁定防止他人在记录“使用中”时进行编辑。
• 序列化、时间戳顺序与提交顺序是保持数据井然有序且安全的替代方案。