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、分片、复制、一致性哈希等分布式原理。
相关推荐
weixin_459753941 小时前
MySQL主从同步跳过错误影响一致性_使用pt-table-sync修复
jvm·数据库·python
kexnjdcncnxjs1 小时前
如何解决Oracle 12c以上版本的ORA-65096_C##公共用户前缀限制
jvm·数据库·python
zhoutongsheng1 小时前
MySQL触发器无法触发的原因分析_MySQL触发器排查指南
jvm·数据库·python
愈努力俞幸运1 小时前
function calling与mcp
android·数据库·redis
2301_779622412 小时前
不同品牌SSD对HTML函数工具加载速度影响大吗_存储测试汇总【汇总】
jvm·数据库·python
dinglu1030DL2 小时前
golang如何实现告警分级与升级_golang告警分级与升级实现步骤
jvm·数据库·python
xcLeigh2 小时前
Python开篇:撬动未来的万能钥匙 —— 从入门到架构的全链路指南
数据库·python·架构·教程·应用·网页
m0_463672202 小时前
Golang如何做图片处理缩放_Golang图片处理教程【收藏】
jvm·数据库·python