什么是 NoSQL
NoSQL 是一种非关系型数据库管理系统,不需要固定的架构,可以避免 JOIN 连接,并且易于扩展。
NoSQL 常用于具有庞大数据存储需求的分布式数据存储,通常是大数据和实时 Web 应用程序等场景。
对于海量数据,使用 RDBMS 处理是会导致系统响应时间变慢,一般的替代方案都是在负载增加时横向扩展到其他的服务器上,而 NoSQL 比关系型数据库更容易扩展。
NoSQL 的功能和优点主要是以下几点:
- NoSQL 数据库不遵循关系模型
- NoSQL 数据库是无模式或具有宽松模式的数据库
- NoSQL 提供简单的 API 作为存储和查询
- NoSQL 可以以分布式方式执行,易于扩展
关于 MongoDB
MongoDB 是一个以 BSON 为数据模型的文档数据库,其中 BSON 是一种类 JSON 的二进制存储格式。
文档类似于 JSON 对象,其中存储的也是键值对的数据结构,字段的值也可以包括其他文档、数组和文档数组。
主要特点
- 易于使用:建模不是必需的,类 JSON 数据模型仅用一条数据表示复杂的层次关系
- 易于扩展:自带分片功能,完美支持横向扩展(更多机器),无需更改应用程序的逻辑
- 功能丰富:支持通用的二级索引,支持聚合分析数据,支持生命周期有限集合,针对大文件存储等等功能
- 性能卓越:使用多粒度锁尽可能提高并发和吞吐量,使用尽可能多的内存作为缓存,尽可能为查询自动选择正确的索引
- 高可用:自带副本集的概念,支持自动故障转移和数据冗余,对读负载均衡非常友好
- 支持多种存储引擎:自带 WiredTiger 存储引擎、内存存储引擎,并且提供可插拔的 API 允许第三方开发存储引擎
适用场景
MongoDB 主要有以下适用场景:
- 作为应用数据库使用,类似于 Oracle、MySQL,由于其建模是非必需的,更适合创业公司快速迭代使用
- 由于其性能较高,且易于扩展,也常用在大数据领域中,通常是用作海量数据处理及搭建数据平台
MongoDB 也有以下不适用场景:
- 高度事务化的系统:需要大量原子性复杂事务的应用程序使用传统的关系型数据库会更好
- 传统的商业智能应用:针对特定问题的 BI 数据库会产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择
技术优势总结
- 类 JSON 结构和对象模型接近,开发代码量低
- 类 JSON 的动态模型意味着更容易响应新的业务需求
- MongoDB 原生支持的副本集提供 99.999% 高可用
- MongoDB 使用分片架构支持海量数据和无缝扩容
MongoDB vs 关系型数据库
不同点 | MongoDB | RDBMS |
---|---|---|
数据模型 | 文档模型 | 关系模型 |
数据库类型 | OLTP(联机事务处理) | OLTP |
CRUD | MQL/SQL | SQL |
高可用 | 复制集 | 集群模式 |
横向扩展能力 | 原生分片完美支持 | 数据分区或者应用侵入式 |
索引支持 | B 树 全文索引 地理位置索引 多键索引 TTL 索引 |
B+ 树 |
开发难度 | 容易 | 困难 |
数据容量 | 没有理论上限 | 千万、亿 |
扩展方式 | 垂直扩展 + 水平扩展 | 垂直扩展 |