Skip to content

NoSQL 数据库 ​

NoSQL (Not Only SQL) 数据库提供了关系型数据库之外的数据存储方式。通过灵活的数据模型、水平扩展等特性满足大规模数据处理需求。

NoSQL 类型 ​

键值存储 ​

  • Redis: 内存数据库、高性能、丰富数据结构
  • Memcached: 缓存系统、简单键值、高并发
  • DynamoDB: AWS 托管、无服务器、按使用计费

文档数据库 ​

  • MongoDB: 文档格式、灵活 Schema、ACID 事务
  • CouchDB: RESTful API、主从复制、冲突解决
  • Firebase: 实时数据库、云托管、移动优先

列族存储 ​

  • HBase: 分布式列存储、大规模数据、Hadoop 生态
  • Cassandra: P2P 架构、高可用、最终一致
  • ClickHouse: OLAP 分析、列式压缩、查询性能

搜索引擎 ​

  • Elasticsearch: 全文搜索、实时分析、近似就绪
  • Solr: 分布式搜索、企业级、灵活配置
  • Meilisearch: 轻量级搜索、接近就绪、用户体验

图数据库 ​

  • Neo4j: 原生图数据库、ACID 事务、查询语言 Cypher
  • ArangoDB: 多模型、图查询、ACID 事务
  • TigerGraph: 大规模图、实时分析、图机器学习

MongoDB ​

核心概念 ​

  • 文档: JSON-like 格式、嵌套结构、灵活 Schema
  • 集合: 文档的集合、类似表、无强制 Schema
  • 数据库: 集合的集合、逻辑隔离
  • ObjectId: 自生成 ID、时间戳、机器标识

查询操作 ​

  • CRUD: Create、Read、Update、Delete
  • 查询语言: MongoDB Query Language、灵活条件
  • 聚合管道: Pipeline 处理、多阶段转换、丰富操作
  • 正则表达式: 文本匹配、模糊查询

索引与优化 ​

  • 索引类型: 单字段、复合、数组、文本索引
  • 写入优化: Bulk Insert、WriteConc concern
  • 查询优化: Explain、执行计划、索引使用

事务支持 ​

  • 单文档事务: 原子操作、嵌套字段更新
  • 多文档事务: 4.0+ 支持、ACID 保证
  • 会话: 客户端会话、事务隔离

Redis ​

数据结构 ​

  • String: 文本、二进制、计数、缓存
  • List: 队列、栈、消息队列、排行榜
  • Set: 去重、集合运算、标签系统
  • Hash: 对象映射、嵌套字段、参数存储
  • Sorted Set: 排序集合、排行榜、去重计数

持久化 ​

  • RDB: 快照持久化、定时保存、恢复快速
  • AOF: 命令日志、精细控制、文件较大
  • 混合持久化: 结合两者优点、平衡性能

高可用架构 ​

  • 主从复制: 数据同步、读写分离、故障转移
  • 哨兵模式: 自动故障转移、监控、故障恢复
  • 集群模式: 分片存储、高可用、横向扩展

应用场景 ​

  • 缓存: 热数据缓存、降低数据库压力
  • 会话存储: 分布式会话、跨服务共享
  • 排行榜: 实时排行、计数器、排序快速
  • 消息队列: 异步处理、任务队列、发布订阅

数据一致性 ​

CAP 理论 ​

  • Consistency (一致性): 数据一致、同时更新
  • Availability (可用性): 系统可用、故障恢复
  • Partition Tolerance (分区容错): 网络分区、节点故障
  • 权衡: 三选二、不同数据库不同选择

最终一致性 ​

  • 定义: 短期不一致、最终一致、实用折衷
  • 同步和异步: 同步写、异步复制、版本向量
  • 冲突解决: 最后写入胜出、应用自定义、向量时钟

分布式特性 ​

水平扩展 ​

  • 分片: ShardKey、一致性 Hash、范围分片
  • 副本: 数据副本、故障转移、读扩展
  • 跨地域: 多数据中心、延迟处理、故障恢复

分布式事务 ​

  • 两阶段提交: Prepare、Commit、Abort
  • Saga 模式: 长事务、补偿机制、编程复杂
  • 最终一致: 异步确认、重试机制、应用容错

选型考虑 ​

对比分析 ​

数据库一致性可用性数据模型水平扩展事务适用场景
MongoDB强中文档⭐⭐⭐⭐✅CMS、内容管理、快速开发
Redis弱强键值⭐⭐⭐限定缓存、会话、实时应用
Cassandra弱⭐⭐⭐⭐⭐列族⭐⭐⭐⭐⭐❌时序数据、大规模日志
Elasticsearch中⭐⭐⭐⭐文档+索引⭐⭐⭐⭐有限全文搜索、日志分析、指标

选型原则 ​

  • 数据特性: 结构化、半结构化、非结构化
  • 访问模式: 读密集、写密集、混合负载
  • 规模: 数据量、并发量、增长预期
  • 一致性: 强一致、最终一致、一致性要求
  • 运维: 复杂度、维护成本、学习成本

最佳实践 ​

设计优化 ​

  • 数据模型: 嵌套与链接平衡、冗余存储
  • 索引策略: 查询模式优先、避免过度索引
  • 避免反模式: N+1 查询、过度规范化

性能优化 ​

  • 查询优化: 使用索引、减少扫描、选择性查询
  • 写入优化: 批量操作、异步写入、背压处理
  • 缓存策略: 读写分离、暖缓存、缓存更新

可靠性 ​

  • 备份恢复: 定期备份、恢复验证、灾难恢复
  • 监控告警: 关键指标、告警规则、预警机制
  • 容错设计: 多副本、故障转移、故障检测