NoSQL

NoSQL(Not Only SQL) 是泛指非关系型数据库 的统称,核心是放弃固定表结构、优先水平扩展 + 高可用 + 灵活 Schema,适合海量、高并发、非结构化 / 半结构化数据场景。


一、核心特点(vs 传统 SQL)

  • Schema 灵活:无需预定义表结构,字段可动态增减(SQL 需严格建表)。
  • 水平扩展:易通过加机器扩容(SQL 多为垂直扩容,分库分表复杂)。
  • BASE 而非 ACID
    • B asically Available(基本可用)
    • Soft state(软状态,允许短暂不一致)
    • Eventual consistency(最终一致性)(SQL 强一致、事务完整)。
  • 数据模型多样:键值、文档、列族、图等。

二、四大主流类型(含代表与场景)

1. 键值型(Key-Value)
  • 原理:哈希表,Key→Value,O (1) 读写。
  • 代表Redis(内存 + 持久化)、Memcached、DynamoDB。
  • 场景:缓存、Session、计数器、限流、排行榜。
2. 文档型(Document)
  • 原理:JSON/BSON/XML 文档,支持嵌套与二级索引。
  • 代表MongoDB、CouchDB、Couchbase。
  • 场景:内容管理、电商商品、用户画像、日志、App 后台。
3. 宽列 / 列族型(Wide-Column)
  • 原理:按列族存储,动态加列,稀疏数据友好,高写入吞吐。
  • 代表Cassandra、HBase、ScyllaDB。
  • 场景:时间序列、IoT 传感器、海量日志、推荐系统。
4. 图数据库(Graph)
  • 原理:节点(实体)+ 边(关系)+ 属性,高效关联查询。
  • 代表Neo4j、JanusGraph、ArangoDB。
  • 场景:社交网络、知识图谱、风控 / 反欺诈、路径分析。

三、核心理论

  • CAP 定理 :分布式系统中,一致性 (C)、可用性 (A)、分区容错 (P) 三者无法同时最优;NoSQL 常选AP(高可用)CP(强一致)
  • BASE 理论:NoSQL 设计基石,牺牲强一致换高可用与性能。

四、NoSQL vs SQL(选型参考)

表格

维度 SQL(MySQL/Oracle) NoSQL(Mongo/Redis)
数据结构 固定表、行 / 列、外键 灵活 Schema、嵌套、无外键
一致性 强一致(ACID) 最终一致(BASE)
扩展 垂直扩容、分库分表复杂 水平扩容、分片原生支持
事务 完整事务 有限事务或无
适合场景 金融交易、强一致、复杂关联查询 海量数据、高并发、快速迭代、非结构化数据

五、常见误区与最佳实践

  • ❌ 误区:NoSQL 完全替代 SQL → ✅ 正确:混合架构(如 MySQL 存订单 + Redis 缓存 + Mongo 存用户行为)。
  • ❌ 误区:NoSQL 无事务 → ✅ 正确:MongoDB 支持多文档 ACID,Redis 支持事务 / 脚本。
  • ✅ 选型原则:
    1. 数据模型是否简单 / 半结构化?
    2. 是否需要超高并发读写?
    3. 一致性要求是否可接受 "最终一致"?
    4. 是否需要水平扩展能力?

六、学习路径建议

  1. 掌握Redis(键值,缓存 / 高并发必学)。
  2. 学习MongoDB(文档,最接近 SQL,易上手)。
  3. 了解Cassandra/HBase(宽列,大数据 / 时序场景)。
  4. 理解CAP/BASE、分片、复制、一致性哈希等分布式原理。
相关推荐
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第87题】【Mysql篇】第17题:分布式事务的实现原理?
java·数据库·分布式·mysql·面试
yyuuuzz1 小时前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
键盘上的猫头鹰4 小时前
【MySQL 教程(八)】索引、事务、用户管理、导入导出与分页查询
数据库·python·mysql
Royzst4 小时前
数据库知识点
数据库
雪的季节5 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt
宋浮檀s5 小时前
应急响应——Web漏洞:命令执行+SSRF+弱口令
运维·数据库·sql·网络安全·oracle·应急响应
yurenpai(27届找实习中)7 小时前
redis_点评(21.好友关注——关注、取关功能实现;共同关注功能实现)
数据库·redis·缓存
Rick19937 小时前
索引的排序和分组
数据库·mysql
爱莉希雅&&&7 小时前
zabbix快速搭建和使用
android·linux·数据库·zabbix·监控
JohnYan7 小时前
工作笔记 - PG分组极值
数据库·后端·postgresql