MongoDB

MongoDB 是什么?

MongoDB是一种流行的面向文档的NoSQL数据库管理系统。它是一个开源的跨平台数据库,旨在为开发人员提供灵活性、扩展性和性能。MongoDB采用了面向文档的数据模型,它使用JSON风格的文档来存储数据,这些文档可以包含各种类型的数据,包括嵌套文档和数组。MongoDB的特点包括:

  1. 面向文档的数据模型:MongoDB使用类似JSON的文档来存储数据,这种文档格式具有灵活性,可以轻松地表示复杂的数据结构。

  2. 灵活性和可扩展性:MongoDB支持水平扩展,可以通过增加更多的服务器来处理更大的数据集和更高的负载。

  3. 高性能:MongoDB具有高性能的特点,能够处理大量的并发请求,并且具有快速的读写能力。

  4. 丰富的查询功能:MongoDB支持丰富的查询功能,包括索引、聚合、地理空间查询等,可以满足各种查询需求。

  5. 高可用性和容错性:MongoDB具有内置的复制和故障恢复功能,可以确保数据的高可用性和容错性。

  6. 开源和社区支持:MongoDB是开源的,并且拥有一个活跃的社区,提供了丰富的文档、教程和支持资源。

MongoDB 的存储结构是什么?

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

  • 文档(Document) :MongoDB 中最基本的单元,由 BSON 键值对(key-value)组成,类似于关系型数据库中的行(Row)。
  • 集合(Collection) :一个集合可以包含多个文档,类似于关系型数据库中的表(Table)。
  • 数据库(Database) :一个数据库中可以包含多个集合,可以在 MongoDB 中创建多个数据库,类似于关系型数据库中的数据库(Database)。

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

SQL 与 MongoDB 常见术语对比 :

SQLMongoDB
表(Table)集合(Collection)
行(Row)文档(Document)
列(Col)字段(Field)
主键(Primary Key)对象 ID(Objectid)
索引(Index)索引(Index)
嵌套表(Embeded Table)嵌入式文档(Embeded Document)
数组(Array)数组(Array)

从对比中我们可以看出MongoDB 中的记录就是一个 BSON 文档,它是由键值对组成的数据结构,类似于 JSON 对象,是 MongoDB 中的基本数据单元。字段的值可能包括其他文档、数组和文档数组。

MongoDB 有什么特点?

  1. 面向文档的数据模型:MongoDB采用面向文档的数据模型,使用类似JSON的BSON格式来存储数据。这种数据模型非常灵活,可以轻松地表示复杂的数据结构,而且不需要事先定义数据模式。

  2. 灵活性和可扩展性:MongoDB具有良好的扩展性,支持水平扩展,可以通过添加更多的服务器来处理更大的数据集和更高的负载。它还支持自动分片,可以将数据分布在集群中的多个节点上。

  3. 高性能:MongoDB具有高性能的特点,能够处理大量的并发请求,并且具有快速的读写能力。它还支持在内存中执行查询,从而提高了查询性能。

  4. 丰富的查询功能:MongoDB支持丰富的查询功能,包括索引、聚合管道、地理空间查询等。它还支持全文搜索和文本索引,可以满足各种查询需求。

  5. 高可用性和容错性:MongoDB具有内置的复制和故障恢复功能,可以确保数据的高可用性和容错性。它还支持自动故障转移和数据恢复,以及自动节点监控和管理。

  6. 安全性:MongoDB提供了各种安全功能,包括访问控制、身份验证、数据加密和审计日志等。它还支持各种安全认证机制,包括用户名/密码认证、TLS/SSL认证等。

MongoDB 适合什么应用场景?

  1. 大数据量和高并发的应用:MongoDB具有优秀的性能和可扩展性,适合处理大数据量和高并发的应用场景,如社交网络、电子商务网站和在线游戏等。

  2. 需要灵活的数据模型:MongoDB的面向文档的数据模型非常灵活,可以轻松地表示复杂的数据结构,适合处理数据模型频繁变化或者没有固定模式的应用场景。

  3. 需要快速迭代和开发的项目:由于MongoDB不需要事先定义数据模式,因此可以更快地进行开发和迭代,适合需要快速响应市场变化的项目。

  4. 需要实时分析和查询的应用:MongoDB支持丰富的查询功能,包括索引、聚合管道、地理空间查询等,可以满足实时分析和查询的需求,如实时监控、日志分析和智能推荐等。

  5. 需要高可用性和容错性的项目:MongoDB具有内置的复制和故障恢复功能,可以确保数据的高可用性和容错性,适合需要24/7运行的关键业务应用。

  6. 需要与其他系统集成的项目:MongoDB拥有一个强大的生态系统,包括各种工具和驱动程序,可以与其他系统集成,如Hadoop、Spark和Kafka等。

MongoDB 事务

MongoDB 从版本4.0开始支持多文档事务,这为开发人员提供了在多个文档上执行原子操作的能力。在MongoDB中,事务可用于以下情况:

  1. 多文档操作:当需要在多个文档上执行原子操作时,可以使用事务。例如,如果你需要在一个订单文档中更新订单状态,并且在相应的库存文档中更新库存数量,你可以使用事务确保这两个操作要么同时成功,要么同时失败。

  2. 跨集合操作:在同一数据库中,你可以在不同的集合之间执行事务操作。这使得你可以跨集合执行原子操作,而无需担心数据一致性问题。

  3. 复杂操作的原子性:当需要执行复杂的操作,需要确保这些操作要么全部成功,要么全部失败时,可以使用事务。例如,在某个文档上执行一系列更新操作,你希望这些更新要么全部成功,要么全部失败,你可以将这些操作包装在一个事务中。

使用MongoDB事务时需要注意以下几点:

  • 事务操作必须要在支持事务的副本集中进行,不支持在分片集群中进行事务操作。
  • MongoDB事务遵循读写一致性,这意味着在一个事务中,如果对某个文档进行了写操作,后续的读操作将会读取到该写操作所修改后的值。
  • MongoDB事务采用悲观锁机制,即事务在执行期间会锁定涉及的文档,直到事务提交或回滚才会释放锁。
  • 事务的最大执行时间是60秒,如果一个事务在60秒内没有执行完毕,MongoDB会自动回滚该事务。

MongoDB 支持哪些类型的索引?

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

  • 单字段索引: 建立在单个字段上的索引,索引创建的排序顺序无所谓,MongoDB 可以头/尾开始遍历。
  • 复合索引: 建立在多个字段上的索引,也可以称之为组合索引、联合索引。
  • 多键索引 :MongoDB 的一个字段可能是数组,在对这种字段创建索引时,就是多键索引。MongoDB 会为数组的每个值创建索引。就是说你可以按照数组里面的值做条件来查询,这个时候依然会走索引。
  • 哈希索引 :按数据的哈希值索引,用在哈希分片集群上。
  • 文本索引: 支持对字符串内容的文本搜索查询。文本索引可以包含任何值为字符串或字符串元素数组的字段。一个集合只能有一个文本搜索索引,但该索引可以覆盖多个字段。MongoDB 虽然支持全文索引,但是性能低下,暂时不建议使用。
  • 地理位置索引: 基于经纬度的索引,适合 2D 和 3D 的位置查询。
  • 唯一索引 :确保索引字段不会存储重复值。如果集合已经存在了违反索引的唯一约束的文档,则后台创建唯一索引会失败。
  • TTL 索引 :TTL 索引提供了一个过期机制,允许为每一个文档设置一个过期时间,当一个文档达到预设的过期时间之后就会被删除。

  • 63
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值