NoSql期末试题全面复习指南
2025.09.18 10:39浏览量:1简介:本文为NoSQL数据库期末复习提供系统性指导,涵盖核心概念、数据模型、分布式架构及实战案例,助力学生高效掌握NoSQL技术要点。
一、NoSQL核心概念与分类
NoSQL(Not Only SQL)是区别于传统关系型数据库的非关系型数据库统称,其核心设计目标是解决海量数据下的高并发、高扩展和灵活数据模型需求。根据数据模型差异,NoSQL可分为四大类:
- 键值存储(Key-Value Store)
以Redis、Riak为代表,数据以键值对形式存储,适用于缓存、会话管理等场景。例如,Redis通过SET user:1001 "{'name':'Alice','age':25}"
存储用户信息,支持毫秒级响应。 - 列族存储(Column-Family Store)
HBase、Cassandra采用列族模型,适合处理稀疏矩阵数据。如HBase表结构中,rowkey:user1001
可包含多个列族(info
、order
),每个列族下又有多个列(name
、email
)。 - 文档存储(Document Store)
MongoDB、CouchDB以JSON/BSON格式存储文档,支持嵌套结构和动态Schema。例如,MongoDB插入文档:db.users.insertOne({
_id: "1001",
name: "Bob",
address: { city: "Beijing", zip: "100000" }
});
- 图数据库(Graph Database)
Neo4j、JanusGraph通过节点和边存储关系数据,适用于社交网络、推荐系统。例如,Neo4j中创建好友关系:CREATE (a:User {name: "Alice"})-[:FRIENDS_WITH]->(b:User {name: "Bob"});
二、CAP理论与BASE模型
NoSQL数据库的设计需在CAP定理(一致性Consistency、可用性Availability、分区容错性Partition Tolerance)中权衡。例如:
- CP型数据库(如HBase):优先保证强一致性和分区容错,可能牺牲可用性。
- AP型数据库(如Cassandra):优先保证高可用和分区容错,允许最终一致性。
BASE模型(Basically Available, Soft state, Eventually consistent)是NoSQL对CAP的妥协方案,通过“最终一致性”替代强一致性。例如,DynamoDB的写操作可能先返回成功,后台通过Gossip协议同步数据。
三、分布式架构与数据分片
NoSQL通过分片(Sharding)实现水平扩展,核心策略包括:
- 哈希分片:如Cassandra使用一致性哈希将数据均匀分布到节点。
- 范围分片:HBase按RowKey范围划分Region,支持范围查询。
- 一致性哈希环:DynamoDB通过虚拟节点减少数据迁移开销。
案例:MongoDB分片集群中,配置服务器(Config Server)存储元数据,路由进程(mongos)根据分片键(如user_id
)将请求转发至对应分片。
四、索引与查询优化
- 索引类型
- 单键索引:MongoDB的
db.users.createIndex({name:1})
。 - 复合索引:优化多字段查询,如
db.orders.createIndex({user_id:1, date:-1})
。 - 地理空间索引:MongoDB的
2dsphere
索引支持位置查询。
- 单键索引:MongoDB的
- 查询优化技巧
- 避免全表扫描,使用
explain()
分析查询计划。 - 覆盖查询(Covered Query):仅通过索引返回数据,减少IO。
- 读写分离:主节点处理写操作,从节点处理读操作。
- 避免全表扫描,使用
五、事务与一致性保障
- 单文档事务
MongoDB 4.0+支持多文档事务,示例:session.startTransaction();
db.accounts.updateOne({_id: "A"}, {$inc: {balance: -100}});
db.accounts.updateOne({_id: "B"}, {$inc: {balance: 100}});
session.commitTransaction();
- 分布式事务
- 两阶段提交(2PC):如X/Open XA协议,但性能较低。
- Saga模式:将长事务拆分为多个本地事务,通过补偿操作回滚。
- TCC(Try-Confirm-Cancel):适用于金融等强一致性场景。
六、实战案例与复习要点
- 案例1:电商系统库存扣减
- 问题:超卖现象。
- 解决方案:Redis原子操作
DECR
或MongoDB事务。# Redis示例
import redis
r = redis.Redis()
stock = r.decr("product
stock")
if stock < 0:
r.incr("product
stock") # 回滚
- 案例2:日志分析系统
- 问题:海量日志存储与快速查询。
- 解决方案:Elasticsearch分片+倒排索引,结合Logstash数据管道。
七、期末复习建议
- 理论部分
- 对比NoSQL与SQL的适用场景(如高并发写入 vs 复杂事务)。
- 掌握CAP定理与BASE模型的差异。
- 实践部分
- 动手搭建MongoDB分片集群或Redis集群。
- 使用JMeter测试NoSQL数据库的并发性能。
- 常见考点
- NoSQL的四种数据模型及其应用场景。
- 分布式事务的实现方式与优缺点。
- 索引优化策略与查询计划分析。
八、总结
NoSQL期末复习需兼顾理论深度与实践能力,重点掌握数据模型分类、CAP定理、分布式架构及查询优化。通过案例分析理解技术选型逻辑,结合实验巩固操作技能,方能在考试中游刃有余。
发表评论
登录后可评论,请前往 登录 或 注册