当前位置: 首页 > 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.gsyq.cn/news/1494804.html

相关文章:

  • 3分钟解锁Mac上网黑科技:Android手机秒变随身WiFi神器!
  • 芯片真假鉴别指南
  • 3分钟掌握MouseClick:让鼠标自动化成为你的得力助手
  • 嵌入式硬件设计:Kinetis K65引脚复用与未用引脚处理实战指南
  • 华硕笔记本终极性能调优:G-Helper让你的ROG设备重获新生
  • G-Helper:轻量级华硕笔记本性能控制解决方案
  • LLPlayer语言学习播放器:终极指南 - 免费AI驱动的双语学习工具
  • 期货程序化开平标志错了总拒单:天勤 last_msg 排查思路
  • 20263款亲测免费视频字幕提取神器,5分钟搞定,好用到哭真香!
  • 从Photoshop图层混合到Qt绘图:图解QPainter::CompositionMode的12种核心模式
  • 保姆级教程:用MMSegmentation+Swin-T+UperNet搞定停车场场景语义分割(附完整代码与数据集)
  • ARM Cortex-M4与K30微控制器:高性能低功耗嵌入式开发实战解析
  • 【粉丝福利社】一本书讲透具身智能:技术、应用、商业与未来
  • 阿贝云免费服务器全面评测:永久免费的云服务值得冲吗?
  • 嘉哲AI智能财税平台深度测评:企业风险评测的智能化实践指南
  • Spring AI 实战指南(二):RAG、向量数据库、Tool Calling、Agent 企业级开发实战
  • Claude归零层:语义保真度校验环的工程级移除与确定性重构
  • 告别内存焦虑:用STM32H7的FMC+SDRAM给项目扩容,保姆级CubeMX配置避坑指南
  • 时序数据库选型:吞吐、压缩与查询延迟的均衡之术
  • 嵌入式硬件设计基石:从MCU数据手册电气特性到可靠系统实现
  • 【简单易懂】电脑端 AI 工具 OpenClaw 解压安装与运行指南(包含安装包)
  • 电商团队如何人效提升效率?测评工具给出专业电商剪辑提效方案
  • 收藏!程序员转行AI:大模型应用开发入门指南,轻松拿高薪!
  • 如何用AI自瞄技术提升你的FPS游戏体验:基于YOLOv8的智能瞄准解决方案
  • 基于NXP KV30F的BLDC电机FOC控制:从硬件设计到算法移植实战
  • ARM Cortex-M4 MCU实战:K20系列低功耗与高性能嵌入式设计指南
  • 有哪些AI论文写作软件是真的契合专业内容,而不是通用套壳?
  • IDM永久激活完整指南:安全免费解锁下载神器
  • 给到夯,Claude Code重磅更新:Auto Mode 与 ultracode 是个什么东西
  • 小米把 1T 模型干到 1000 TPS?这事 Groq 看了得沉默