关系型数据库的瓶颈
您将识别促成 NoSQL 运动的 SQL 数据库在扩展性和灵活性方面的痛点。
关系型数据库的瓶颈 是 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 反馈 — 无需本地设置。