MongoDB是一个文档数据库,旨在帮助开发者更快地构建现代应用程序。它将数据存储在类似JSON 的灵活文档中,从而可以像应用程序代码使用数据一样轻松地对数据进行建模。灵活的模式可让您在不停机的情况下发展数据模型,快速迭代并轻松处理非统一数据。
MongoDB提供强大的查询引擎、水平扩展和内置高可用性,因此您可以支持从快速原型设计到大型关键任务工作负载的所有工作负载。
MongoDB是一个完全事务性的操作数据库,支持范围工作负载类型,包括:
核心架构
MongoDB基于多个核心架构组件构建,这些组件使其有别于关系数据库:
文档数据库
MongoDB 中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档、数组和文档数组。
MongoDB 灵活的面向对象数据模型可让您以反映代码库中对象模型的方式构建数据。这样就无需在使用关系数据库时进行复杂的对象关系映射。
以下是MongoDB文档示例,展示文档如何以反映应用程序对象模型的格式表达复杂的分层数据:
{ _id: ObjectId("507f1f77bcf86cd799439011"), name: "Alice", birthdate: ISODate("1990-01-01T00:00:00Z"), address: { street: "123 Main St", city: "Springfield", state: "IL" }, hobbies: ["reading", "hiking", "coding"] }
文档数据模型的其他优点包括:
文档对应于许多编程语言中的原生数据类型。
嵌入式文档和数组减少了对昂贵连接的需求,这些连接可能会降低性能。
动态模式支持多态性,允许同一集合中的文档具有不同的结构。
事务
MongoDB支持多文档事务,允许您将多个读取和写入操作作为单个全有或全无事件运行。
主要ACID 事务功能包括:
ACID保证:事务可跨多个操作提供原子性、一致性、隔离性和持久性。
多文档操作:您可以运行跨多个文档的复杂操作,同时保持数据一致性。
分布式事务:您可以在具有相同ACIDACID 一致性保证的情况下分片的片集群协调事务。
高可用性
MongoDB 的内置复制机制提供自动故障转移、数据冗余和更高的读取容量。通过自动故障转移,如果主节点 (primary node in the replica set)服务器不可用,集群会自动选择新的主节点 (primary node in the replica set),从而确保写入操作保持可用。此外,数据的多个副本存储在不同的服务器上,以提高数据的持久性。
水平缩放
主要分片功能包括:
自动数据分发: MongoDB会根据分片键自动对数据进行分区,并将其分发到机器集群中。
区域分片:您可以定义地理区域,根据分片键范围控制文档的放置。
分片键优化:随着应用程序的发展,您可以优化分片键以提高性能。