当前位置: 首页 > news >正文

NoSQL 非关系型数据库【简洁版】

1. Redis(键值数据库 KV,面试 / 工程重灾区)

1.1 八大基础数据结构与底层编码

  1. String:底层 SDS;int/embstr/raw 三种对象编码

  2. List:3.2 后 QuickList(ziplist + 双向链表)

  3. Set:少量整数 IntSet,量大转 Dict 哈希表

  4. ZSet:少量数据 ziplist,量大跳表 skiplist

  5. Hash:小数据 ziplist,大数据 dict 哈希表

  6. Geo:基于 ZSet 实现坐标距离计算、附近点位

  7. Bitmap:本质 String 位图,签到、活跃统计、简易布隆

  8. 特殊扩展结构:

    (1)Stream:基数树 RadixTree 存储消息 ID、消费组、Pending 队列、死信、消息回溯(2)HyperLogLog:稀疏 / 密集双结构,基数 UV 统计,pfmerge 合并

1.2 底层基础组件

  • SDS 动态字符串、双向链表、跳跃表 skiplist、压缩列表 ziplist、哈希表 dict

  • LRU/LFU 淘汰配套内部采样结构

1.3 IO 与事件模型

  1. Redis6.0 前:主线程单线程处理命令解析、应答;持久化 / 同步走子进程

  2. Redis6.0+:多线程负责网络 IO 读写,命令执行依旧单线程

  3. IO 多路复用 epoll;文件事件 + 时间事件驱动

  4. 过期键三重删除策略:惰性删除、定期抽样删除、内存淘汰兜底

1.4 持久化:RDB + AOF + 混合持久化

  1. RDB 快照

    1. 触发时机:save 配置、bgsave 手动、shutdown 关机、主从全量同步

    2. bgsave 流程:fork 子进程、写时复制 COW、子进程落盘 RDB

    3. 痛点:fork 堆大阻塞、宕机丢失窗口数据;RDB 不保存过期时间

    4. 无盘复制:主不落地 RDB,直接流式发给从

  2. AOF 日志

    1. 三种刷盘策略:always /everysec (默认) /no

    2. AOF 重写机制:子进程后台合并指令,父进程缓冲新写入命令

  3. 混合持久化:RDB 文件头 + 增量 AOF 日志,兼顾恢复速度与数据安全

  4. 宕机风险:kill -9 丢失未落盘;正常 shutdown 自动 bgsave + 刷 AOF

1.5 内存全套管控

  1. 8 种内存淘汰策略 volatile-lru、allkeys-lru、volatile-lfu、allkeys-lfu、volatile-random、allkeys-random、volatile-ttl、noeviction (默认)

  2. 内存模型:对象头、ptr 编码优化、内存碎片成因

  3. 碎片优化:activedefrag 主动整理、关闭大页、ziplist 阈值调优

  4. 内存边界:maxmemory 不含复制缓冲区、客户端缓冲区、持久化缓冲

  5. 高危问题

    1. bigkey 大键阻塞主线程;方案:拆分、unlink 惰性删除、异步分批删

    2. client-output-buffer-limit 防缓冲区溢出崩节点

    3. lazyfree (4.0+):unlink/flushdb async 后台释放内存不阻塞主线程

1.6 高可用三层架构:主从 → 哨兵 → Redis Cluster

1.6.1 主从复制
  1. PSYNC2.0:复制偏移量、repl_backlog 环形缓冲区、断点续传

  2. 全量同步:RDB 传输 + 缓冲区补发增量;增量同步正常同步指令

  3. 异步复制;replica-wait 半同步可等待 N 台从确认

  4. 从默认只读;从节点不转发写命令

  5. backlog 溢出会强制重新全量同步

1.6.2 哨兵 Sentinel
  1. 哨兵是特殊 Redis 节点,不存业务数据;集群互相自动发现

  2. 检测机制:PING 心跳 → 主观下线 → quorum 过半判定客观下线

  3. 故障转移选举权重:slave-priority > 复制偏移量 > 运行 ID

  4. 职责:监控、自动故障切换、配置下发、异常通知客户端

1.6.3 Redis Cluster 无中心集群
  1. 16384 哈希槽设计原因;CRC16 (key)%16384 定位槽

  2. Gossip 节点通信协议,同步槽分配、故障状态

  3. 每个主节点独立一套主从,无全局主从

  4. 槽迁移流程:import→migrate→del,支持中断续迁

  5. 扩容 / 缩容:在线迁移哈希槽,不停机平滑伸缩

  6. 跨槽限制:MGET、事务、Lua、Pipeline 多槽报错;HashTag 强制同槽

  7. 集群可用性:所有槽必须分配完毕才可写入;主宕机且无从则集群不可用

1.7 缓存三大经典问题

  1. 缓存穿透:空值缓存、布隆过滤器、入参校验

  2. 缓存击穿:热点 key 互斥锁、逻辑过期、永不过期

  3. 缓存雪崩:过期时间随机偏移、集群高可用、多级缓存、限流熔断

1.8 缓存设计体系

  1. 四大读写模式:Cache Aside (旁路)、Read Through、Write Through、Write Back

  2. 缓存更新策略对比

    1. 先更新 DB 再删缓存(业界主流)

    2. 先更新 DB 再更新缓存

    3. 先删缓存再更新 DB

  3. 缓存预热:上线批量加载热点数据

  4. 缓存降级:Redis 故障切本地 Caffeine / 默认返回,保可用

  5. 多级缓存架构:本地堆缓存 + Redis 分布式缓存

  6. 序列化选型:JSON、Protobuf、JDK 序列化优劣对比

1.9 客户端高级能力

  1. Pipeline 管道:批量发包、减少网络 RTT、无原子性

  2. 事务 MULTI/EXEC:命令排队,无回滚,语法错全失败、运行错部分成功

  3. WATCH 乐观锁 CAS 机制

  4. Lua 脚本:多条指令原子执行;SHA 缓存脚本;集群必须 key 同槽

  5. 连接模式:短连接、长连接、连接池

1.10 分布式锁完整方案

  1. 基础原子加锁:SET key val NX EX

  2. 防死锁:强制过期时间

  3. 可重入锁:Hash 结构存储持有者 + 计数(Redisson 实现)

  4. 看门狗续期:默认 30s 锁时长,每 10s 异步续期,防止任务未完成锁过期

  5. 释放锁:Lua 原子校验持有者再删除,避免误删他人锁

  6. 红锁 RedLock:多独立实例过半加锁,容错更高、落地少

  7. 集群锁漏洞:主加锁成功未同步从即宕机,新主出现重复锁;红锁缓解无法根除

2.1 基础概念

文档 (BSON) → 集合 → 数据库;BSON 支持二进制、ObjectId、日期、内嵌文档、数组

2.2 基础操作

CRUD、数组操作、文档嵌套读写、游标分页管理

2.3 聚合体系

完整聚合管道:match/project/group/sort/limit/skip/unwind 等操作符;explain 执行计划分析

2.4 特殊集合类型

  1. Capped 固定集合:定大小、FIFO 自动淘汰,日志队列场景

  2. Timeseries 时序集合:监控指标专用,自动分层压缩、时间分片

  3. View 视图:虚拟只读集合,预封装聚合逻辑无物理存储

2.5 索引全类型

  1. 基础:单键、复合、唯一、稀疏索引

  2. 特殊:文本全文索引、2dsphere 地理索引、TTL 自动过期索引、部分索引

  3. 构建方式:前台阻塞构建 /background 后台在线构建

  4. 性能判定:IXSCAN 索引扫描、COLLSCAN 全表扫描

2.6 存储引擎 WiredTiger

  1. MVCC 快照隔离,读不阻塞写、写不阻塞读

  2. 压缩算法:snappy/zlib/zstd,集合索引可单独配置

  3. 写前 Journal 日志,崩溃重做恢复;可关日志换性能

  4. Checkpoint 定时落盘磁盘;WT Cache 冷热数据自动置换

2.7 副本集架构

  1. 三类节点:Primary 主、Secondary 从、Arbiter 仲裁 (只投票无数据)

  2. 特殊从节点:

    1. Hidden 隐藏节点:不选举、不提供业务读,用于备份分析

    2. Delayed 延迟从:延迟同步,误删回滚恢复

  3. Oplog 环形日志:主所有写入存入 oplog,从拉取回放;oplog 不足会触发全量同步

  4. 选举规则:过半票数当选;priority 优先级调控权重

  5. 读写控制:

    1. WriteConcern 写关注:w:1 /majority/w:N,平衡一致性性能

    2. ReadPreference 五种读偏好:primary/primaryPreferred/secondary/secondaryPreferred/nearest

2.8 分片集群

  1. 组件:mongos 路由、shard 分片节点、config 配置三副本元数据

  2. 分片键 ShardKey:范围分片 / 哈希分片;分片键设计决定是否热点

  3. Chunk 最小数据单元,默认 64MB;自动分裂、均衡迁移

  4. Jumbo 超大块无法自动迁移,需手动拆分

  5. mongos 无状态可无限水平扩容

2.9 事务能力

  1. 4.0 + 副本集支持多文档事务;4.2 + 分片跨分片事务

  2. 限制:单事务最大 16MB、超时限制、无法操作 system 集合与 capped 集合

  3. 隔离级别:仅快照读、读未提交,无标准 RC/RR 隔离

3.1 架构与依赖

  1. 依赖组件:Zookeeper(元数据、选举、故障检测)、HDFS(三副本持久存储)

  2. 核心进程:

    1. HMaster:元数据管理、Region 负载均衡、故障分配

    2. RegionServer:真实读写服务

3.2 核心数据模型

RowKey (唯一主键)、ColumnFamily 列族、Qualifier 列、时间戳 Version 多版本、单元格 TTL 过期

3.3 完整读写流程

  1. 写入:先写 WAL 预写日志 → 写入 MemStore 内存缓冲区

  2. MemStore 满触发刷盘生成 StoreFile(底层 HFile)

  3. 读取:BlockCache 缓存 → MemStore → 磁盘 HFile;布隆过滤器快速过滤不存在 RowKey

3.4 WAL 预写日志

  1. 宕机依靠 WAL 恢复未刷盘 MemStore 数据

  2. 可关闭 WAL 换取极致写入性能(存在丢数风险)

  3. WAL 滚动、归档、过期清理策略

3.5 Compaction 合并机制(性能核心)

  1. Minor 小合并:少量 StoreFile 后台轻量合并

  2. Major 大合并:全部文件合并,清理墓碑、旧多版本;IO 开销巨大

  3. 合并风暴风险:多 Region 同时合并拖垮集群;线上限流、错峰执行

3.6 数据删除逻辑

不物理立即删除,写入 Delete 墓碑标记;墓碑分 DeleteFamily/Column/Version;仅大合并时彻底清除

3.7 Region 全生命周期

  1. 自动分裂:Region 大小超限拆分为两个子 Region

  2. 手动合并小 Region 减少管理开销

  3. Master 定时迁移 Region 均衡各 RS 负载

  4. 迁移流程:刷空 MemStore、转移元数据、目标 RS 打开 Region

3.8 性能优化关键点

  1. RowKey 热点优化:加盐、哈希、反转、分段;禁止自增连续 RowKey

  2. 预分区:建表提前拆分 Region,避免上线单点写入压力

  3. 过滤器体系:行过滤、列过滤、值过滤,减少磁盘 IO

  4. 协处理器:Observer 拦截读写、Endpoint 自定义聚合计算

  5. 缓存体系:BlockCache (LRU/Bucket 堆外缓存)

  6. BulkLoad 批量导入:绕过 MemStore 直接生成 HFile,海量高速入库

  7. 快照 Snapshot:表备份、克隆、误删回滚方案

3.9 适用边界

适合:PB 级宽表、日志、用户行为、大数据数仓底层、海量时序离线数据 不适合:高频低延迟在线事务、多条件复杂查询、小并发轻量业务

4. 其他 NoSQL 分类补充

4.1 时序数据库 TSDB(InfluxDB、Prometheus、TimescaleDB)

  1. 数据模型:时间戳 + 标签 tag + 指标 value

  2. 核心能力:数据降采样压缩、按时间 TTL 自动过期、时序聚合运算

  3. 场景:服务器监控、IoT 设备采集、业务指标大盘

4.2 图数据库 GraphDB(Neo4j、NebulaGraph)

  1. 模型:节点 (实体)、关系 (关联边)、双方属性

  2. 能力:深度图遍历、最短路径、社区发现、多跳关系查询

  3. 场景:社交关系、知识图谱、资金风控链路、个性化推荐网络

4.3 其他主流 NoSQL 补充

  1. Cassandra(列族 AP 型):去中心化 Gossip、虚拟节点、可调一致性 QUORUM,跨机房多活

  2. RocksDB/LevelDB(嵌入式磁盘 KV):LSM 树结构;Redis Module、HBase 底层存储引擎

  3. Elasticsearch(广义文档搜索引擎 NoSQL):倒排索引、分词全文检索、分片副本架构,常与 Mongo 对比

  4. NewSQL (TiDB/Spanner):融合 SQL + 分布式分片,不属于纯 NoSQL,用于强一致分片业务

5. NoSQL 底层理论与通用体系(必背面试基石)

5.1 CAP & BASE

  1. CAP:分布式网络分区 P 必然存在,只能二选一

    1. CP:Mongo 副本集、HBase(牺牲可用性保一致性)

    2. AP:Redis Cluster、Cassandra、时序 / 图库(牺牲强一致保高可用)

  2. BASE:基本可用、柔性状态、最终一致性,NoSQL 主流一致性模型

  3. 一致性梯度:强一致 > 会话一致 > 最终一致 > 弱一致

5.2 两大磁盘存储树对比

  1. B + 树(Mongo WiredTiger、MySQL InnoDB):读性能优秀,写入有随机 IO 放大

  2. LSM 树(HBase、RocksDB、时序库):顺序写入吞吐极强,读存在合并放大,适配海量写入

5.3 通用容灾与冷热分层

  1. 故障模式:节点宕机、网络分区、磁盘损坏、误删、写入热点击穿

  2. 容灾手段:副本、分片、快照定时备份、延迟从节点、异地多活

  3. 冷热分层策略

    1. 热:内存缓存 (Redis/BlockCache/WT Cache)

    2. 温:SSD 高性能盘

    3. 冷:机械盘、对象存储 OSS、归档高压缩

5.4 高频横向对比面试点

  1. Redis vs MongoDB:并发、事务、查询能力、存储成本、一致性

  2. MongoDB vs HBase:文档灵活结构 vs 固定列族宽表;实时中小型 vs PB 级离线海量

  3. 主从 / 哨兵 / Redis Cluster 三层架构适用规模区分

  4. Redis 分布式锁 vs Zookeeper 分布式锁:ZK 是 CP 可靠性更高、性能更低

  5. Cache Aside / ReadThrough / WriteThrough / WriteBack 四种缓存模型差异

5.5 NoSQL 选型对比速记

类型代表优势场景短板
KVRedis缓存、分布式锁、计数、消息、超高并发复杂查询弱、大数据存储成本高
文档MongoDB多变结构业务、中小型海量业务、灵活嵌套事务性能一般,超海量分片复杂度高
列族HBasePB 级离线海量宽表、大数据生态延迟偏高,开发繁琐,实时事务差
时序 / 图Influx、Neo4j监控时序、关系网络专属场景通用业务适配差
http://www.jsqmd.com/news/983064/

相关文章:

  • Python文件操作与数据持久化实战
  • Kinetis K12D引脚复用与I2S音频接口配置实战指南
  • MC68HC05BD7中断、复位与I/O端口配置实战详解
  • 从文本迷宫到数据宝藏:KH Coder文本挖掘工具完全指南
  • 嵌入式开发时序规范解析:从I2C、SPI到SDHC的接口设计与调试
  • 嵌入式硬件设计:Kinetis K65引脚复用与未用引脚处理实战指南
  • 网络基础扫盲:子网掩码、网关、端口、MAC地址、VLAN,详细讲清楚(小白同学可以看懂版)
  • 基于LPC865 MCU的智能电池充电器:SMBus通信与PWM闭环控制详解
  • 3分钟掌握MouseClick:让鼠标自动化成为你的得力助手
  • 芯片真假鉴别指南
  • HybridCLR 深度解析:Unity全平台零成本原生C热更新实现原理与实践指南
  • 华硕笔记本终极性能调优:G-Helper让你的ROG设备重获新生
  • 别再死记硬背了!Halcon算子速查手册:从HObject到HTuple,新手避坑指南
  • 五种主流大米品种高清图像数据集(Arborio/Basmati/Ipsala/Jasmine/Karacadag),7.5万张带标签训练测试图
  • 期货程序化开平标志错了总拒单:天勤 last_msg 排查思路
  • 告别Excel画图!用SerialPlot实时绘制串口波形,调试效率翻倍(附避坑指南)
  • MPV播放器高帧率补帧实战配置:从24fps到120fps的性能优化指南
  • 如何轻松备份微信聊天记录并生成年度回忆报告:WeChatMsg完全指南
  • LLPlayer语言学习播放器:终极指南 - 免费AI驱动的双语学习工具
  • 出差整理客户拜访攒的7小时录音2026挖到款亲测免费录音转换分钟搞定万字工具
  • G-Helper:轻量级华硕笔记本性能控制解决方案
  • Steam成就管理终极指南:如何安全解锁与重置Steam游戏成就
  • 股指期货量化平今太贵:天勤 offset_priority 怎么配
  • 认知统一场论实验验证报告V1.1 规范修订版(世毫九实验室内部定稿)
  • 2.5V升压12V恒流驱动芯片 线路讲解(FP7208X)
  • Point-E:从文字到3D点云的AI创作革命
  • 从Photoshop图层混合到Qt绘图:图解QPainter::CompositionMode的12种核心模式
  • OIDE 上海户外展 | 骆驼户外美妆美陈设计,凭什么出圈?肆墨设计
  • 激光制导和激光制导无源干扰技术(上)
  • AI SEO效果验证的方法论:测量指标、样本规模与业务价值归因