一、核心概念对比
SQL(关系型数据库)
- 理论基础:基于 Edgar Codd 的关系模型(1970)
- 数据组织:二维表格结构,通过主键/外键建立关联
- 代表产品:Oracle(商用)、MySQL(开源)、PostgreSQL(开源)、SQL Server(商用)
NoSQL(非关系型数据库)
- 出现背景:应对 Web 2.0 时代海量非结构化数据
- 核心特征:灵活的数据模型,BASE 理论(Basically Available, Soft-state, Eventually consistent)
四大类型:
- 文档数据库:MongoDB(BSON)、CouchDB(JSON)
- 键值存储:Redis(内存型)、DynamoDB(云原生)
- 列族存储:Cassandra(分布式)、HBase(Hadoop生态)
- 图形数据库:Neo4j(关系网络)、ArangoDB(多模型)
二、数据结构差异
SQL 严格模式
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
- 强制预定义字段类型
- 禁止未声明的列插入
- 严格的参照完整性约束
NoSQL 灵活结构(以 MongoDB 为例)
{
"_id": ObjectId("5f9d7a3b6f8b4a3e1c7e8f9a"),
"username": "data_engineer",
"contact": {
"email": "dev@example.com",
"wechat": "bigdata_2023"
},
"tags": ["AI", "Cloud", "IoT"],
"last_login": ISODate("2023-10-20T08:30:00Z")
}
- 支持嵌套文档和数组
- 动态添加字段无需预定义
- 异构记录可共存于同一集合
三、查询语言对比
SQL 标准操作
SELECT departments.name, AVG(employees.salary)
FROM employees
JOIN departments ON employees.dept_id = departments.id
WHERE employees.hire_date > '2020-01-01'
GROUP BY departments.name
HAVING AVG(salary) > 8000
ORDER BY 2 DESC;
- 强类型字段操作
- 复杂 JOIN 操作支持
- ACID 事务保证
NoSQL 查询示例(MongoDB)
db.orders.aggregate([
{ $match: { status: "completed", date: { $gt: ISODate("2023-01-01") } } },
{ $unwind: "$items" },
{ $group: {
_id: "$customer_id",
totalSpent: { $sum: { $multiply: ["$items.quantity", "$items.price"] } },
avgOrder: { $avg: "$items.quantity" }
}},
{ $sort: { totalSpent: -1 } },
{ $limit: 10 }
])
- 类JSON查询语法
- 缺乏跨文档事务(部分支持)
- 嵌套文档查询效率高
四、扩展策略对比
SQL 垂直扩展
- 提升单机性能:CPU升级至Intel Xeon Platinum 8480+(56核)
- 扩展存储:使用SAN存储阵列(如Dell EMC PowerMax)
- 成本曲线:呈指数级增长($5k→$50k→$500k)
NoSQL 水平扩展
- 分片策略:Cassandra 的 consistent hashing 分片
- 数据分布:通过 Gossip 协议同步元数据
- 扩展实例:从 3 节点扩展到 300 节点线性扩容
五、事务处理机制
SQL ACID 保证
- 原子性(Atomicity):全成功或全失败
- 隔离性(Isolation):MVCC(如PostgreSQL)实现读写隔离
- 持久性(Durability):WAL(Write-Ahead Logging)机制
NoSQL 最终一致性
- DynamoDB:通过向量时钟解决版本冲突
- Cassandra:可调一致性级别(ONE/QUORUM/ALL)
- MongoDB:4.0+ 版本支持多文档事务(性能损耗约15-20%)
六、典型应用场景
SQL 适用场景
- 金融核心系统(银行交易、证券清算)
- ERP 系统(SAP、用友NC)
- 航空订票系统(Sabre、Amadeus)
NoSQL 适用场景
- 社交网络(Facebook 使用 Cassandra 存储用户动态)
- 物联网(AWS IoT 使用 Timestream 处理时序数据)
- 内容推荐(Netflix 使用 Redis 实现实时推荐)
评论 (0)