为何使用MongoDB?

Mongodb用来应对“三高”问题:

高并发:对数据库高并发读写的需求。

高性能:对海量数据的高效存储和访问的需求。

高可用:对数据库的高扩展性和高可用性的需求。

MySQL数据库在面临这“三高”时,显得力不从心,所以学习Mongodb才更能丰富业务场景的处理能力。

MongoDB 是一种开源的、高性能、非关系型数据库管理系统(NoSQL DBMS),是一个非常流行的数据库解决方案。它被设计用于存储和检索大量非结构化或半结构化数据,特别适合应用程序开发中需要灵活性和可伸缩性的场景。

MongoDB 采用了文档数据库模型,这意味着它存储数据的方式类似于 JSON(JavaScript Object Notation)文档。文档是 MongoDB 中的基本数据单元,它们使用 BSON(Binary JSON)格式存储,这种格式支持各种数据类型,包括字符串、数字、日期、数组和嵌套文档。MongoDB 文档可以包含不同结构的数据,这使得它非常适合存储变化多端、不规则或半结构化数据。

MongoDB 有什么特点?

  • 数据记录被存储为文档 :MongoDB 中的记录就是一个 BSON 文档,它是由键值对组成的数据结构,类似于 JSON 对象,是 MongoDB 中的基本数据单元。

  • 模式自由 :集合的概念类似 MySQL 里的表,但它不需要定义任何模式,能够用更少的数据对象表现复杂的领域模型对象。

  • 支持多种查询方式 :MongoDB 查询 API 支持读写操作 (CRUD)以及数据聚合、文本搜索和地理空间查询。

  • 支持 ACID 事务 :NoSQL 数据库通常不支持事务,为了可扩展和高性能进行了权衡。不过,也有例外,MongoDB 就支持事务。与关系型数据库一样,MongoDB 事务同样具有 ACID 特性。MongoDB 单文档原生支持原子性,也具备事务的特性。MongoDB 4.0 加入了对多文档事务的支持,但只支持复制集部署模式下的事务,也就是说事务的作用域限制为一个副本集内。MongoDB 4.2 引入了分布式事务,增加了对分片集群上多文档事务的支持,并合并了对副本集上多文档事务的现有支持。

  • 高效的二进制存储 :存储在集合中的文档,是以键值对的形式存在的。键用于唯一标识一个文档,一般是 ObjectId 类型,值是以 BSON 形式存在的。BSON = Binary JSON, 是在 JSON 基础上加了一些类型及元数据描述的格式。

  • 自带数据压缩功能 :存储同样的数据所需的资源更少。

  • 支持 mapreduce :通过分治的方式完成复杂的聚合任务。不过,从 MongoDB 5.0 开始,map-reduce 已经不被官方推荐使用了,替代方案是 聚合管道。聚合管道提供比 map-reduce 更好的性能和可用性。

  • 支持多种类型的索引 :MongoDB 支持多种类型的索引,包括单字段索引、复合索引、多键索引、哈希索引、文本索引、 地理位置索引等,每种类型的索引有不同的使用场合。

  • 支持 failover :提供自动故障恢复的功能,主节点发生故障时,自动从从节点中选举出一个新的主节点,确保集群的正常使用,这对于客户端来说是无感知的。

  • 支持分片集群 :MongoDB 支持集群自动切分数据,让集群存储更多的数据,具备更强的性能。在数据插入和更新时,能够自动路由和存储。

  • 支持存储大文件 :MongoDB 的单文档存储空间要求不超过 16MB。对于超过 16MB 的大文件,MongoDB 提供了 GridFS 来进行存储,通过 GridFS,可以将大型数据进行分块处理,然后将这些切分后的小文档保存在数据库中。

MongoDB 的存储结构是什么?

MongoDB 的存储结构区别于传统的关系型数据库,主要由如下三个单元组成:

  • 文档(Document) :MongoDB 中最基本的单元,由 BSON 键值对(key-value)组成,类似于关系型数据库中的行(Row)。

  • 集合(Collection) :一个集合可以包含多个文档,类似于关系型数据库中的表(Table)。

  • 数据库(Database) :一个数据库中可以包含多个集合,可以在 MongoDB 中创建多个数据库,类似于关系型数据库中的数据库(Database)。

也就是说,MongoDB 将数据记录存储为文档 (更具体来说是BSON文档),这些文档在集合中聚集在一起,数据库中存储一个或多个文档集合。

MongoDB适用场景

MongoDB 在许多应用程序场景中都是一个强大的选择,特别适合以下情况:

  • 大数据量和高可伸缩性:MongoDB 可以处理大规模数据集,并且可以轻松分片数据以实现水平扩展。这使其成为大数据和高负载应用程序的理想选择。

  • 变化多端和快速迭代:对于应用程序的数据模型经常发生变化或需要快速迭代的情况,MongoDB 的动态模式非常适用。您可以轻松地修改文档结构而不需要进行复杂的数据库迁移。

  • 半结构化数据:如果您的应用程序需要存储半结构化数据,即数据的结构可能不完全相同,MongoDB 的文档模型非常适合。您可以存储不同结构的数据在同一个集合中。

  • 地理空间数据:对于需要存储和查询地理空间数据的应用程序,如地理信息系统(GIS)、位置感知应用和地图应用,MongoDB 提供了强大的地理空间支持。

  • 实时分析:MongoDB 支持实时分析,您可以使用聚合框架来执行复杂的分析操作,并将结果快速呈现给应用程序。

  • 内容管理系统:如果您需要构建内容管理系统(CMS)或博客平台,MongoDB 可以存储文章、评论、标签和媒体文件等数据。

  • 社交媒体应用:对于社交媒体应用程序,MongoDB 的高可伸缩性和实时数据处理能力使其成为一个理想的选择。

  • 云原生应用程序:MongoDB 与云计算服务(如 AWS、Azure 和 Google Cloud)集成紧密,使其成为构建云原生应用程序的理想数据库选择。