MongoDB Academy · 课时

关系型数据库的瓶颈

您将识别促成 NoSQL 运动的 SQL 数据库在扩展性和灵活性方面的痛点。

第 1 / 4 课13 个步骤

关系型数据库的瓶颈 是 CoddyKit 上的免费 MongoDB Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 MongoDB Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 MongoDB Academy 课程共包含 4 节课。

关系型数据库的崛起

几十年来,MySQL 和 PostgreSQL 等关系型数据库一直占据主导地位。它们将数据存储在整齐的行列表格中,而且运行效果很好。那么,为什么还要寻找其他方案呢?

僵化的 Schema 问题

SQL 表使用僵化的 Schema:您必须预先定义每一列。之后再修改,就需要执行迁移;迁移可能会锁定表并导致停机。

-- Adding a column to a large table in PostgreSQL can be slow
ALTER TABLE users ADD COLUMN preferences JSONB;
-- On 100M rows this may require a full table rewrite
-- and blocks reads/writes for minutes

纵向扩展与横向扩展

为了增长,SQL 通常采用纵向扩展——换用更大、更昂贵的服务器。但这种方式有上限。现代应用需要跨多台机器进行横向扩展,而 SQL 对此支持得并不灵活。

大规模场景下的 JOIN 性能

SQL 将数据拆分到多个表中,再通过 JOINs 将其重新拼接起来。数据量较小时没有问题,但数据规模巨大时,每次查询都要连接五个表就会变慢。

-- A typical normalized SQL query joining 4 tables
SELECT o.id, c.name, p.title, oi.quantity
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN order_items oi ON oi.order_id = o.id
JOIN products p ON p.id = oi.product_id
WHERE o.status = 'pending';

高流量写入问题

SQL 通过锁定行,利用 ACID 事务来保证数据安全。这对银行业务非常理想,但当您需要每秒执行数百万次写入时,这些锁就会成为瓶颈。

非结构化与半结构化数据

Web 中充满了类似杂乱 JSON 的半结构化数据。如果强行将它们放入固定列中,就会产生大量空字段,或需要采用笨拙的变通方案。

-- EAV table: flexible but awkward to query
CREATE TABLE product_attributes (
  product_id INT,
  attr_name  VARCHAR(50),
  attr_value VARCHAR(200)
);
-- Querying all electronics by voltage is painful:
SELECT * FROM product_attributes
WHERE attr_name = 'voltage' AND CAST(attr_value AS INT) > 100;

互联网规模带来的警醒

大约在 2006 年,Google 和 Amazon 遇到了真正的扩展瓶颈,并公开了各自的解决方案。这催生了全新的浪潮:为互联网规模而构建的 NoSQL 数据库。

NoSQL 的不同之处

NoSQL 放弃了 SQL 的部分规则,换来了新的优势:灵活的 Schema、轻松跨机器扩展,以及快速写入。它并不总是更好,只是针对不同目标进行了优化。

RDBMS 仍然占优的场景

SQL 仍然在许多场景中占优:金融事务、复杂报表,以及稳定的数据。大多数应用都不会超出经过良好调优的 PostgreSQL 的能力范围。选择适合任务的工具即可!

文档模型作为解决方案

MongoDB 给出的答案是文档模型。它不再将一个用户拆分到五个表中,而是把所有内容存储在一个类似 JSON 的文档中。下面的代码展示了一个示例。

// A MongoDB document stores related data together
{
  _id: ObjectId('...'),
  name: 'Alice',
  email: 'alice@example.com',
  address: { city: 'London', zip: 'EC1A' },
  tags: ['premium', 'newsletter'],
  createdAt: ISODate('2024-01-15')
}

内置横向扩展能力

MongoDB 通过分片进行横向扩展——随着业务增长添加服务器。副本集会持续保留数据副本,因此当一个节点发生故障时,另一个节点会自动接管。

快速检查

测试您对本课中 MongoDB 和 NoSQL 数据库概念的理解。

课程回顾

您了解了为什么 SQL 在超大规模下会出现瓶颈,JOINs 和大量写入在哪些场景中影响最大,以及 MongoDB 的文档模型如何解决这些问题。接下来:NoSQL 的四大类别。

免费开始

用 AI 导师学习 JavaScript — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「关系型数据库的瓶颈」课时是免费的吗?

是的 — 「关系型数据库的瓶颈」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 MongoDB Academy 课程的其余内容,请升级到 CoddyKit PRO。 MongoDB Academy 课程共包含 4 节课。

「关系型数据库的瓶颈」这节课中我会学到什么?

您将识别促成 NoSQL 运动的 SQL 数据库在扩展性和灵活性方面的痛点。 你通过在浏览器中直接运行的动手代码来练习 MongoDB Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 MongoDB Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 MongoDB Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「关系型数据库的瓶颈」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 MongoDB Academy 课中编写并运行代码吗?

能。每节 MongoDB Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 关系型数据库的瓶颈
  2. NoSQL 类型:文档、键值、列式与图
  3. 用通俗语言理解 CAP 定理
  4. MongoDB 的定位
← 返回 MongoDB Academy