NoSQL是考试的重点和热点,通常会与传统的SQL关系型数据库进行对比考察。
一、NoSQL概述与核心理念
- 定义:Not Only SQL,泛指非关系型的、分布式的数据库系统。不保证ACID特性
- Atomicity
直译:原子性
含义:事务中的所有操作要么全部成功提交(Commit),要么全部失败回滚(Rollback),不可分割(类似原子的不可分割性)。 - Consistency
直译:一致性
含义:事务执行前后,数据库都必须处于一致的状态(如转账前后总金额不变)。 - Isolation
直译:隔离性
含义:多个并发事务执行时,彼此之间相互隔离,互不干扰(如避免脏读、不可重复读)。 - Durability
直译:持久性
含义:事务一旦提交,其对数据库的修改必须是永久性的(即使系统崩溃也不会丢失)。
{/tabs-pane}
,旨在解决大规模数据集合、多数据种类带来的挑战,尤其是大数据应用难题。
- 产生背景:
· 大数据时代的3V挑战:Volume(海量)、Velocity(高速)、Variety(多样)。
· 关系型数据库的局限:在高并发、海量数据场景下,扩展性差(难以水平扩展)、读写性能瓶颈、僵化的表结构难以应对半结构/非结构化数据。 - 核心特点(与RDBMS对比):
· 模式灵活:无需预定义固定表结构,支持动态添加字段(Schema-less)。
· 高可扩展性:易于通过增加节点实现水平扩展。
· 高性能:针对特定数据模型和访问模式优化,读写速度快。
· 高可用性:通过分布式、副本机制保障。
· 弱一致性(最终一致性):遵循BASE理论,而非ACID。
· BASE:Basically Available(基本可用)、Soft state(软状态)、Eventually consistent(最终一致)。 - CAP定理(核心考点!):
· 在分布式系统中,一致性(Consistency)、可用性(Availability) 和 分区容忍性(Partition Tolerance) 三者不可兼得,最多只能同时满足其中两项。
· CP系统:保证一致性和分区容忍性(如:HBase, MongoDB的早期版本)。在发生分区时,可能牺牲可用性。
· AP系统:保证可用性和分区容忍性(如:Cassandra, DynamoDB)。在发生分区时,可能返回旧数据,牺牲强一致性。
· CA系统:单点关系型数据库,难以在分布式环境中实现。
二、NoSQL主要数据模型与代表产品(重点!)
这是分类考察的核心,必须掌握每种类型的特点、适用场景和典型产品。
数据模型 核心概念 典型产品 优点 适用场景 不适用场景
键值数据库 简单的“键-值”对存储,值可以是任意数据块。 Redis(内存型)、Memcached、DynamoDB 性能极高,结构简单,扩展容易。 会话存储、缓存、排行榜、实时配置。 复杂查询、多键事务、关系数据。
文档数据库 以文档(如JSON/BSON)为基本单位,文档内可嵌套。 MongoDB、CouchDB 模式灵活,数据结构自然,支持复杂查询(二级索引)。 内容管理、用户档案、日志数据、电商产品目录。 需要多文档事务或复杂Join的场景。
列族数据库 按“列族”存储数据,适合存储半结构化的海量数据。 HBase、Cassandra 可扩展性极好,适合海量数据存储和批量读取。 大数据分析(如Hadoop生态)、日志聚合、时间序列数据。 需要复杂事务或实时强一致性读写的场景。
图数据库 以“图”结构存储实体(节点) 和关系(边)。 Neo4j、TigerGraph 高效处理复杂关系,路径查询性能远超关系型数据库。 社交网络、推荐引擎、欺诈检测、知识图谱。 大规模数据但关系简单的场景,或需要频繁全表扫描的场景。
三、关键技术概念
- 分片:将数据水平拆分到多个物理节点上的技术,是实现水平扩展的基础。
- 复制:将数据副本存储在多台服务器上,以提高可用性和读性能。
· 主从复制:写主,读可从。
· 多主/对等复制:任何节点都可写,更复杂。 - 一致性协议:
· 最终一致性:数据副本经过一段时间后最终达成一致。
· 读写一致性:写后读保证读到最新数据。
· 仲裁机制:如R + W > N(N为副本总数,R为读副本数,W为写副本数)来平衡一致性与可用性。 - 索引:如MongoDB的B树索引、Redis的Sorted Set等,用于加速查询。
四、应用场景与选择原则
· 何时选择NoSQL?
- 数据量巨大且增长迅速,需要水平扩展。
- 数据结构不固定,变化频繁。
- 应用对高性能、高并发读写有严格要求。
- 数据模型简单(KV)或高度关联(图),关系型数据库不擅长。
- 业务可以接受最终一致性。
· 何时仍选择关系型数据库?
- 需要复杂的事务(如银行转账)。
- 数据结构稳定,业务逻辑基于严格的实体关系。
- 需要复杂的多表关联查询和报告。
- 数据一致性是首要要求。
五、挑战与趋势
- 挑战:
· 缺乏统一的查询语言(SQL是标准)。
· 事务支持相对较弱(虽然MongoDB等已支持多文档事务)。
· 技术生态和工具链不如关系型数据库成熟。
· 对开发人员的架构设计能力要求更高。 - 趋势:
· 多模数据库:一个数据库支持多种数据模型(如文档+图)。
· NewSQL:尝试兼具NoSQL的扩展性和SQL的ACID特性(如:Google Spanner, TiDB)。
· 云原生数据库:与云计算深度集成,按需伸缩(如:AWS DynamoDB, Azure Cosmos DB)。
备考建议
- 重点掌握:CAP定理、四种数据模型的对比(用表格形式记忆)、典型产品的归类与应用场景。
- 理解区别:深刻理解NoSQL与SQL在扩展方式(水平 vs 垂直)、一致性模型(BASE vs ACID)、模式(灵活 vs 固定)上的根本区别。
- 关注真题:多做历年真题中关于NoSQL的选择题和案例分析题,熟悉出题角度。
- 结合实际:将知识点与常见的互联网应用(如电商、社交、日志系统)联系起来,理解技术选型的逻辑。
评论 (0)