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

相关推荐
围炉聊科技1 小时前
长期免费的数据库方案——零成本基建系列
数据库
AC赳赳老秦1 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
bransyin2 小时前
一个 SQL 字段到底是怎么算出来的?我做了一个能给出“证据”的血缘工具
大数据·sql·ai·血缘
梁辰兴3 小时前
软件工程:数据结构设计
数据库·软件工程·设计原则·设计方法·梁辰兴·数据库结构设计·数据库结构类型
AC赳赳老秦3 小时前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw
灯澜忆梦4 小时前
【MySQL18】进阶篇 | MySQL管理
数据库·mysql
zcmodeltech4 小时前
智能制造教学实训沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的工业机器人-智慧工厂-数字孪生全场景联动方案
数据库·stm32·嵌入式硬件·机器人·制造·多分类
AI多Agent协作实战派4 小时前
AI多Agent协作系统实战(四十):AI说“没有错误“,系统判了“测试失败“——一个正则的误判
数据库·人工智能
隔窗听雨眠5 小时前
OceanBase接入DeepSeek:数据库与AI的深度融合如何改写企业数据规则
数据库·人工智能·oceanbase
playboy1346 小时前
工作室 NAS 存储故障-办公室所有数据无法访问怎么办
数据库