SQL数据库和非SQL数据库

一句话先记住

SQL 数据库 = 结构固定、强一致、事务可靠
NoSQL 数据库 = 结构灵活、易扩展、高并发


一、SQL 数据库(关系型数据库)

代表

  • MySQL
  • PostgreSQL
  • Oracle
  • SQL Server
  • SQLite

核心特点

  1. 表结构固定

    • 必须先建表(字段、类型、约束)
    • 数据必须符合表结构
  2. 强事务(ACID)

    • 原子性(Atomicity)
    • 一致性(Consistency)
    • 隔离性(Isolation)
    • 持久性(Durability)
  3. 用 SQL 语言操作

sql 复制代码
SELECT * FROM file_meta WHERE file_sha1 = 'xxx';
  1. 支持复杂查询 & Join
sql 复制代码
SELECT u.name, f.filename
FROM user u
JOIN file f ON u.id = f.user_id;

优点

  • 数据一致性强
  • 事务可靠
  • 适合复杂关系
  • 金融/订单/账务系统首选

缺点

  • 扩展困难(主要是纵向扩展)
  • 高并发写入性能有限
  • 表结构改动成本高

二、NoSQL 数据库(非关系型)

NoSQL ≠ 不支持 SQL

而是 Not Only SQL

常见分类 & 代表

1️⃣ Key-Value
  • Redis
  • Memcached
text 复制代码
key -> value
2️⃣ 文档型
  • MongoDB
  • CouchDB
json 复制代码
{
  "file_sha1": "xxx",
  "filename": "a.png",
  "size": 12345
}
3️⃣ 列存储
  • HBase
  • Cassandra
4️⃣ 图数据库
  • Neo4j

核心特点

  1. 结构灵活

    • 不需要预定义 schema
    • 同一个集合里字段可以不一样
  2. 天然适合分布式

    • 水平扩展(加机器)
  3. 高并发性能好

    • 写入速度快
    • 非常适合缓存/日志/实时数据
  4. 弱事务(大多)

    • 多数 NoSQL 只保证最终一致性

优点

  • 扩展性极强
  • 高并发
  • 开发灵活
  • 适合大数据量

缺点

  • 事务能力弱
  • 复杂查询能力差
  • 数据一致性要自己设计

三、用你现在的「文件系统项目」来对比(非常关键)

你现在用的是:

go 复制代码
map[string]FileMeta

这是:

内存型 Key-Value NoSQL(最简版)


如果用 SQL 数据库(MySQL)

表设计:

sql 复制代码
CREATE TABLE file_meta (
  file_sha1 VARCHAR(40) PRIMARY KEY,
  file_name VARCHAR(255),
  file_size BIGINT,
  location VARCHAR(512),
  upload_at DATETIME
);

优点:

  • 数据持久化
  • 重启不丢
  • 支持查询、排序

如果用 NoSQL(MongoDB)

文档结构:

json 复制代码
{
  "file_sha1": "xxx",
  "file_name": "a.png",
  "size": 12345,
  "location": "...",
  "upload_at": "2026-01-01"
}

优点:

  • 结构随便加字段
  • 扩展性好
  • 写入速度快

实际工程常见做法(重要)

SQL + NoSQL 混合使用

场景 用什么
用户、订单、账务 SQL
文件元信息 SQL
文件秒传去重 Redis
文件缓存 Redis
日志 NoSQL

四、什么时候该选哪个?(决策表)

需求 推荐
强一致、事务 SQL
高并发、缓存 NoSQL
数据结构经常变 NoSQL
复杂查询 SQL
分布式 NoSQL
学习/原型 NoSQL

五、面试级总结(你可以直接背)

SQL 数据库适合结构化数据和强事务场景;
NoSQL 数据库适合高并发、可扩展和非结构化数据场景;
实际系统通常两者结合使用。

相关推荐
睡不醒男孩0308231 小时前
第二篇:深入探索开源数据库高可用:构建基于CLup的PostgreSQL生产级高可用与读写分离架构
数据库·postgresql·开源·clup
Micro麦可乐3 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
码农阿豪4 小时前
从零到一:Spring Boot快速接入金仓数据库实战
数据库·spring boot·后端
鼎讯信通4 小时前
风电光缆运维提质增效:G-4000A 光缆故障追踪仪破解风场巡检难题
运维·网络·数据库
三十..4 小时前
MySQL 从入门到高可用架构实战精要
运维·数据库·mysql
cfm_29145 小时前
Redis五大基本数据结构底层了解
数据结构·数据库·redis
真实的菜6 小时前
Redis 从入门到精通(十二):典型业务场景实战 —— 排行榜、限流器、秒杀系统、Session 共享
数据库·redis·python
你想考研啊6 小时前
mysql数据库导出导入
数据库·mysql·oracle
十年编程老舅7 小时前
Linux DRM:底层逻辑与实践架构
数据库·mysql
The Sheep 20237 小时前
Vue复习
linux·服务器·数据库