NoSQL基础知识超详细介绍

发布时间:2026/6/4 23:24:44
NoSQL基础知识超详细介绍
一、NoSQL 是什么NoSQL是Not Only SQL的缩写译为不仅仅是 SQL泛指非关系型数据库。它主要针对键值、文档、图形等类型数据的存储并且天生支持分布式、数据冗余和数据分片等特性旨在提供可扩展、高可用、高性能的数据存储解决方案。1.1 核心特征特征说明非关系型不遵循传统 RDBMS 模型数据是非关系的查询语言多样不使用 SQL 作为主要查询语言各数据库有特定 API分布式原生解决数据库的可伸缩性和可用性问题最终一致性不针对原子性或一致性问题做严格保证非 ACID常见误解非关系型数据库不能很好地存储关系型数据错误NoSQL 数据库完全可以存储关系型数据只是存储方式与关系型数据库不同。1.2 主流代表产品类型代表产品核心能力键值存储Redis、Memcached超高性能读写、缓存文档型MongoDB、CouchDB灵活 Schema、JSON 存储图数据库Neo4j、JanusGraph深度关系查询、图算法列存储HBase、Cassandra海量数据、时序存储二、SQL 与 NoSQL 的核心区别上图展示了 SQL 与 NoSQL 在六个维度的能力对比满分 10 分对比维度SQL 数据库NoSQL 数据库数据存储模型结构化数据行列表格非结构化/半结构化JSON 文档、键值对、宽列、节点边代表产品Oracle、MySQL、PostgreSQLMongoDB、Neo4j、HBase、Redis事务管理严格 ACID 属性通常支持 BASE最终一致性查询语言标准 SQL无统一标准特定于数据库一致性强一致性最终一致性可扩展性垂直扩展增强单服务器硬件水平扩展多服务器集群基于分片适用场景复杂查询、结构化数据、事务密集高并发、动态数据、海量数据性能表现小规模数据集表现优异大规模高并发场景表现优异一句话总结SQL 擅长复杂事务和强一致性NoSQL 擅长高并发和海量扩展。两者不是替代关系而是互补关系。三、分布式系统的核心理论3.1 CAP 定理CAP 定理由加州大学计算机科学家Eric Brewer于 1998 年提出是分布式系统的基石理论。分布式系统有三个核心指标C - Consistency一致性用户访问任意节点得到的数据必须一致A - Availability可用性读写操作总能成功系统持续对外服务P - Partition tolerance分区容错性网络分区时系统仍能持续服务⚠️核心结论在任何分布式系统中不能同时完美满足三项最多同时满足两项。为什么必须选 P在分布式系统中网络故障不可避免网络分区一定存在。系统必须继续运行因此分区容错性P是硬性指标所有分布式系统都要满足。于是问题简化为C 与 A 的取舍组合策略代表数据库适用场景CP牺牲可用性保证一致性。网络分区时不允许写入直到恢复。MongoDB、HBase、Redis金融交易、库存扣减等强一致场景AP牺牲一致性保证可用性。允许读写但可能出现数据不一致。Cassandra、DynamoDB、CouchDB社交网络、电商浏览等高可用场景CA单点集群无需考虑分区同时保证一致性和可用性。MySQL、PostgreSQL单机传统单机数据库实际案例图解上图展示了数据从初始一致→写入后不一致→最终一致的完整过程。在分布式系统中这种短暂的不一致是常态系统设计的关键在于如何控制不一致的窗口期和影响范围。网络分区下的 CAP 抉择假设三节点集群中Node1/Node2 与 Node3 之间发生网络故障CP 模式选择检测到分区后暂停对 Node3 的写入操作保证 Node1/Node2 与 Node3 的数据最终一致代价Node3 在分区期间不可写可用性受损适用银行转账、库存扣减一分钱都不能错AP 模式选择允许继续对 Node3 写入Node3 独立运行与 Node1/Node2 数据暂时不一致代价读取 Node3 可能得到旧数据一致性受损适用微博点赞、商品浏览短暂不一致可接受3.2 BASE 理论既然 CAP 定理告诉我们必须做取舍那具体该怎么取舍BASE 理论给出了答案。BASE 理论是对 CAP 定理的实践延伸提供了一种柔性事务的设计思路特性全称含义BABasically Available基本可用系统出现故障时允许损失部分可用性保证核心功能可用SSoft State软状态允许存在中间状态数据可暂时不一致EEventually Consistent最终一致性不保证实时一致但保证最终所有副本数据一致生活化理解基本可用双 11 期间电商平台的收藏夹功能可能降级但下单支付核心功能必须可用。这就是基本可用——牺牲边缘功能保住核心命脉。软状态手机充值时微信支付扣款成功 → 话费余额未立即到账中间状态→ 异步处理后到账。这段时间内两边总金额不一致属于软状态。用户收到15 分钟内到账的提示就是系统对软状态的坦诚告知。最终一致性充值记录写入主库后从库异步同步。虽然存在短暂延迟但最终所有节点的充值记录一致。这种暂时不一致但终将一致的特性是绝大多数互联网应用的选择。分布式事务的两种模式模式机制特点适用场景CP 模式子事务执行后不立即提交等待彼此结果同时提交或回滚。锁定资源数据不可用。强一致性可用性受损银行转账、库存扣减AP 模式子事务分别执行和提交不锁定数据。允许不一致通过补偿措施恢复。高可用最终一致订单状态、用户画像四、NoSQL 数据库的分类与选型NoSQL 数据库主要分为四大类每种类型都有其独特的数据模型和最佳适用场景。4.1 键值存储数据库Key-Value Store数据结构简单的 key-value 映射类似 Java 的 HashMap典型代表Redis、Memcached、RocksDB核心优势读写性能极高O(1) 时间复杂度查询适用场景缓存、会话存储、实时排行榜、分布式锁、限流计数器特点可以通过 key 快速查询 valuevalue 格式灵活字符串、二进制、JSONRedis 典型应用# 缓存热点数据SET user:1001{name:张三,level:5}EXPIRE user:10013600# 1小时过期# 分布式锁SET lock:order:123owner_001NX EX30# 实时排行榜ZADD leaderboard1500player_AZADD leaderboard2300player_BZREVRANGE leaderboard09# 前10名4.2 文档型数据库Document Store数据结构类似 JSON 的文档格式BSON、JSON支持嵌套和数组典型代表MongoDB、CouchDB、Elasticsearch核心优势灵活的 Schema无需预定义表结构支持复杂嵌套适用场景内容管理、用户资料、电商商品目录、日志存储、全文搜索特点可对特定字段建立索引实现部分关系型功能聚合管道MongoDB 典型文档{_id:user_001,name:张三,profile:{age:28,city:北京,tags:[VIP,active]},orders:[{id:O100,amount:299,status:completed},{id:O101,amount:599,status:pending}],created_at:ISODate(2024-01-15T08:00:00Z)}4.3 列存储数据库Wide-Column Store数据结构按列族存储动态列稀疏矩阵友好典型代表HBase、Cassandra、ScyllaDB核心优势高压缩比单列查询 IO 效率高水平扩展能力极强适用场景时序数据、物联网数据、海量日志分析、推荐系统、消息队列特点方便存储结构化和半结构化数据针对列查询有极大 IO 优势HBase 表结构示例RowKey | CF:Profile | CF:Behavior | CF:Metrics ----------|---------------------|---------------------|------------------ user001 | name:张三, age:28 | click:100, buy:5 | score:85, level:3 user002 | name:李四, age:35 | click:50, buy:2 | score:60, level:24.4 图数据库Graph Database数据结构节点Node和边Edge组成的图结构支持属性典型代表Neo4j、JanusGraph、ArangoDB核心优势深度关系查询性能优异原生支持图算法最短路径、社区发现适用场景社交网络、知识图谱、欺诈检测、推荐引擎、权限管理特点图形关系的最佳存储关系型数据库处理深度关联查询性能低下多表 JOIN 灾难Neo4j Cypher 查询示例// 查找张三的朋友的朋友二度关系 MATCH (zhangsan:Person {name: 张三})-[:FRIEND]-()-[:FRIEND]-(fof) RETURN fof.name, fof.age // 查找最短路径 MATCH path shortestPath( (a:Person {name: 张三})-[:FRIEND|COLLEAGUE*]-(b:Person {name: 王五}) ) RETURN path五、选型决策如何为你的业务选择数据库上图提供了一套完整的 NoSQL 选型决策流程。以下是更详细的选型指南5.1 选型 checklist业务特征推荐类型代表产品关键原因需要缓存/高速读写键值存储RedisO(1) 查询、内存操作数据结构复杂多变文档型MongoDB灵活 Schema、JSON 原生数据量 TB 级且按时间增长列存储HBase/Cassandra水平扩展、高压缩关系复杂且需深度查询图数据库Neo4j原生图遍历、避免 JOIN强事务 复杂查询SQLPostgreSQLACID、SQL 标准混合场景多数据库SQL NoSQL各司其职、优势互补5.2 真实案例参考公司/产品技术栈选型理由TwitterRedis Manhattan (自研)时间线缓存、海量推文存储NetflixCassandra EVCache全球视频推荐、会话管理UberMySQL Schemaless Redis订单事务 灵活事件存储 缓存京东MySQL Redis HBase交易事务 商品缓存 用户行为分析知乎MySQL Redis Elasticsearch内容存储 缓存 全文搜索六、架构演进从单体到分布式上图展示了从传统单体架构到现代分布式架构的演进过程6.1 单体架构的困境┌─────────────────────────────────┐ │ 单体应用 (所有业务耦合) │ └─────────────────────────────────┘ ↓ ┌─────────────────────────────────┐ │ MySQL / Oracle (垂直扩展) │ │ 升级 CPU → 升级内存 → 升级 SSD │ │ 成本指数增长性能线性增长 │ └─────────────────────────────────┘痛点扩展困难硬件有天花板单台服务器性能上限明显单点故障数据库宕机 全站宕机性能瓶颈所有业务争抢同一数据库连接池6.2 分布式架构的优势┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 订单服务 │ │ 用户服务 │ │ 商品服务 │ │ 推荐服务 │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────────────┴────────────┴────────────┘ ↓ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ Redis │ │ MongoDB │ │ HBase │ │ Neo4j │ │ 缓存 │ │ 文档 │ │ 列存 │ │ 图库 │ └─────────┘ └─────────┘ └─────────┘ └─────────┘优势水平扩展加机器即可提升性能成本线性增长高可用单节点故障不影响整体服务灵活选型不同业务选择最适合的数据库独立演进各服务可独立部署、独立扩展七、NoSQL 的核心优势总结优势说明业务价值灵活性无需预定义 Schema支持半结构化和非结构化数据迭代开发更快需求变更成本低可扩展性原生支持水平扩展分布式硬件集群业务增长时无缝扩容成本可控高性能针对特定数据模型优化避免 JOIN 开销高并发场景下响应更快用户体验更好高可用多副本、自动故障转移、分区容忍7×24 小时服务SLA 保障功能强大针对数据模型定制的 API 和数据类型Redis Sorted Set、MongoDB 聚合管道等总结本文作为 NoSQL 专栏的开篇建立了以下核心认知NoSQL 不是取代 SQL而是补充。关系型数据库在事务密集型场景依然不可替代。CAP 定理决定了分布式系统的取舍。理解 CP/AP 的选择是架构设计的基础。BASE 理论提供了柔性一致性的实践路径。让系统在可用性和一致性之间找到平衡。四类 NoSQL 数据库各有适用场景。选型应基于数据特征、访问模式和扩展需求。现代架构趋向混合使用。SQL NoSQL 各司其职优势互补。欢迎在评论区讨论交流如果觉得本文有帮助请点赞收藏你的支持是我持续更新的动力。