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 数据库适合高并发、可扩展和非结构化数据场景;
实际系统通常两者结合使用。

相关推荐
升职佳兴32 分钟前
SQL 进阶3:连续登录问题与 ROW_NUMBER 差值法完整解析
java·数据库·sql
我是永恒1 小时前
PostgreSQL数据库安装配置连接Paperclip
数据库·postgresql
一个天蝎座 白勺 程序猿1 小时前
踩坑生产后整理:KingbaseES表空间管理、auto_createtblspcdir参数深度解析与运维最佳实践
运维·数据库·kingbasees
oG99bh7CK1 小时前
FastAPI + PostgreSQL 实战:从入门到不踩坑,一次讲透
数据库·postgresql·fastapi
Wait....1 小时前
MySQL事务知识复习
数据库·mysql
杨云龙UP1 小时前
Oracle 19c:RMAN Duplicate异机复制数据库实操_20260402
linux·运维·服务器·数据库·网络协议·tcp/ip·oracle
刘~浪地球2 小时前
Redis 从入门到精通(七):集合操作详解
数据库·chrome·redis
光泽雨2 小时前
SQL分组Group By
数据库
我真会写代码2 小时前
MySQL高频面试题(含详细解析):从基础到高级,备战面试不踩坑
数据库·mysql·面试
观远数据2 小时前
未来3年企业数据分析的核心:基于自然语言的AI优先决策体系如何搭建
数据库·人工智能·数据分析