MongoDB 是一个基于文档的 NoSQL 数据库,它使用 BSON(二进制格式的 JSON)作为数据存储和交换的格式。MongoDB 的存取数据机制主要涉及以下几个关键概念:
- 文档(Document):在 MongoDB 中,数据是以文档的形式存储的。一个文档是一个键值对的集合,类似于 JSON 对象。每个文档都有一个唯一的标识符,称为
_id
字段。 - 集合(Collection):多个文档组成一个集合。集合是 MongoDB 中用于组织和存储文档的容器。
- 数据库(Database):多个集合组成一个数据库。一个 MongoDB 实例可以包含多个数据库。
- 存取操作:
- 插入(Insertion):使用
insert()
或save()
方法将一个文档插入到集合中。如果文档中没有_id
字段,MongoDB 会自动为它生成一个唯一标识符。 - 查询(Querying):使用
find()
方法从集合中检索文档。可以通过指定条件、排序、投影等参数来过滤和获取数据。 - 更新(Updating):使用
update()
或replace()
方法更新集合中的文档。可以使用更新操作符(如$set
、$inc
等)来指定更新的字段和值。 - 删除(Deleting):使用
remove()
或deleteOne()
、deleteMany()
方法从集合中删除文档。
- 插入(Insertion):使用
- 索引(Indexing):为了提高查询性能,MongoDB 支持在集合上创建索引。索引是用于快速查找和排序数据的键值对集合。MongoDB 支持多种类型的索引,包括单字段索引、复合索引、唯一索引等。
- 聚合(Aggregation):聚合框架用于对数据进行复杂的数据处理和转换,例如计算总和、平均值、最大值、最小值等。通过聚合管道操作符,可以组合多个处理阶段来实现复杂的分析任务。
- 分片(Sharding):为了处理大规模数据,MongoDB 支持将数据分散到多个服务器上,这种技术称为分片。通过将数据分布在多个分片上,可以增加可扩展性和可用性,同时保持高性能。
- 复制集(Replica Set):复制集是 MongoDB 的一种高可用性解决方案,通过在多个服务器上复制数据来提供数据冗余和故障转移能力。当主节点发生故障时,MongoDB 可以自动将一个从节点提升为新的主节点,继续提供服务。
- 连接(Connections):MongoDB 使用基于连接的通信协议与客户端应用程序进行交互。客户端通过连接到 MongoDB 实例建立连接,然后使用各种数据库命令与服务器进行通信。连接可以是长连接或短连接,具体取决于应用程序的需求和配置。
- 安全性和认证(Security and Authentication):MongoDB 支持用户认证和访问控制,以确保数据的安全性。可以使用密码和其他身份验证机制来限制对数据库的访问,并实施细粒度的权限控制。
这些是 MongoDB 的主要存取数据机制概念。了解这些概念对于有效地使用 MongoDB 进行数据存储和检索至关重要。除了上述提到的存取数据机制,MongoDB 还具有以下一些重要特性: - 灵活性:MongoDB 是一个面向文档的数据库,这意味着它存储的是数据结构,而不是预定义的模式。这为开发人员提供了更大的灵活性,可以轻松地存储和查询各种类型的数据。
- 高性能:MongoDB 使用了内存映射文件技术,使得数据可以直接映射到物理内存中,大大提高了读写性能。此外,MongoDB 还支持索引、查询优化等机制,进一步提高了查询性能。
- 可扩展性:MongoDB 支持水平扩展,可以通过添加更多的服务器来增加存储和计算能力。通过分片技术,可以将数据分散到多个服务器上,从而实现可扩展性。
- 强大的查询能力:MongoDB 支持丰富的查询操作符和查询语言,可以方便地实现各种复杂的查询需求。同时,MongoDB 还支持聚合管道操作,可以对数据进行复杂的处理和转换。
- 自动分片:MongoDB 提供了自动分片功能,可以根据数据量和查询负载自动将数据分散到多个服务器上。这大大简化了分布式系统的设计和实现。
- 复制集:如前所述,复制集是 MongoDB 的一个重要特性,它提供了数据冗余和高可用性。通过复制集,可以确保数据的可靠性和持久性。
- 丰富的生态系统:MongoDB 拥有庞大的生态系统,包括各种驱动程序、工具、框架和库。这些生态系统为开发人员提供了丰富的选择,可以轻松地与 MongoDB 进行集成。
- 社区支持:MongoDB 有一个活跃的社区,提供了大量的文档、教程、案例和问题解答。这意味着开发人员可以轻松地找到支持和帮助,解决遇到的问题。
总之,MongoDB 是一个强大、灵活、可扩展的 NoSQL 数据库,适用于各种类型的数据存储和查询需求。通过深入了解其存取数据机制和特性,开发人员可以充分利用 MongoDB 的优势,构建高效、可靠和可扩展的应用程序。
Collections:在mongodb中叫做集合,是文档的集合。无模式,可以存储各种各样的文档。类似mysql中的表。
Document:这里的user集合(“表”)有一个document(document可以理解为mysql中的记录)。文档是mongodb保存数据的基本单元。数据的存储结构为BSON格式,也就是我们开始添加的文档,key value键值对类型。
GridFS:因为bson对象的大小有限制,不适合存储大型文件,GridFS文件系统为大型文件提供了存储的方案,GridFS下的fs保存的是图片、视屏等大文件。
写入:
了解了数据结构,就知道了存储机制,MongoDB 的默认数据目录是/data/db,它负责存储所有的MongoDB 的数据文件。在MongoDB内部,每个数据库都包含一个.ns 文件和一些数据文件,而且这些数据文件会随着数据量的增加而变得越来越多。
MongoDB 内部有预分配空间的机制,每个预分配的文件都用0 进行填充,由于有了这个机制, MongoDB 始终保持额外的空间和空余的数据文件,从而有效避免了由于数据暴增而带来的磁盘压力过大的问题。
由于表中数据量的增加,数据文件每新分配一次,它的大小都会是上一个数据文件大小的2倍,每个数据文件最大2G。这样的机制有利于防止较小的数据库浪费过多的磁盘空间,同时又能保证较大的数据库有相应的预留空间使用。
数据库的每张表都对应一个命名空间,每个索引也有对应的命名空间。这些命名空间的元数据都集中在*.ns 文件中。
读取:
Mongodb可以使用内存映射文件来处理对磁盘文件中数据的读写请求,mongodb并不对磁盘和RAM这两者进行区别对待,只是将文件看做一个巨大的数组,然后按照字节为单位访问其中的数据,剩下的都交由操作系统处理。