解决脚气 發表於 2026-2-9 10:09:00

【MongoDB】MongoDB 概述

<p data-pm-slice="2 2 []"><span>  MongoDB 是一款开源的 NoSQL 文档型数据库,与传统关系型数据库(如&nbsp;<span data-pm-slice="1 1 [&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{},&quot;namespaceURI&quot;:&quot;http://www.w3.org/1999/xhtml&quot;}]">PostgreSQL)的表结构不同,MongoDB 以类似 JSON 的 BSON(Binary JSON)格式存储数据,支持动态扩展数据结构,非常适合处理非结构化、半结构化数据及高并发、大数据量的业务场景。</span></span></p>
<p><span>  BSON 作为 MongoDB 的核心数据格式,不仅兼容 JSON 的数据结构,还支持二进制数据、日期、时间戳等扩展类型,能更高效地满足复杂数据存储需求。每个数据记录被称为“文档”,多个文档组成“集合”,集合对应关系型数据库中的表,但无需遵循统一的字段结构,同一集合中的文档可拥有不同的字段和数据类型。</span></p>
<h1><span><span>MongoDB 核心特性</span></span></h1>
<p><span><span>  - 灵活的文档模型:文档结构与应用程序中的对象模型天然契合,无需复杂的对象关系映射(ORM),嵌入式文档和数组可减少跨表关联查询,提升数据访问效率。</span></span></p>
<p><span><span>  - 高性能:在海量数据处理方面,查询速度快;支持多种类型索引,能高效处理高吞吐量请求。支持分布式计算能力。</span></span></p>
<p><span><span>  - 高可用性:通过副本集实现数据冗余和自动故障转移,当主节点故障时,集群可自动选举新主节点,确保服务持续可用。</span></span></p>
<p><span><span>  - 水平扩展性:通过分片技术将数据分布式存储在多个节点,可根据数据量和并发需求动态扩展集群容量,突破单节点性能瓶颈。</span></span></p>
<p><span><span>  - 事务支持:MongoDB 最初并不支持事务。然而,随着版本迭代,MongoDB 在其 4.0 版 本中开始支持多文档事务。</span></span></p>
<p><span><span>  - 丰富的查询能力:支持范围查询、模糊查询、地理空间查询、全文搜索等多种查询方式,配合强大的聚合计算能力实现复杂数据统计分析(适合非结构化数据)。</span></span></p>
<p><span><span>  - 跨平台:支持多种操作系统。</span></span></p>
<p><span><span>  - 简单易用:<span>MongoDB 是通用型文档数据库,设计初衷就是贴近开发习惯、降低存储和通用查询的使用成本,相比于 Elasticsearch,MongoDB 在开发、查询语句、部署运维等方面都更简单,学习成本也更低。</span></span></span></p>
<h1 data-pm-slice="2 2 []"><span><span>MongoDB 的设计思路</span></span></h1>
<p><span>  MongoDB 不同于 PostgreSQL 这类关系型数据库,两者的设计初衷本质就不同 —— 关系型数据库是强一致性、事务安全优先的数据库,<span>为 “数据关联紧密、事务要求高、查询复杂” 的业务而生,<span>牺牲部分性能换数据可靠性,因此,在海量数据情况下会引发性能问题<span>;而 MongoDB 是高并发、水平扩展优先的数据库,<span>是为灵活、扩展、高性能写入设计的文档型 NoSQL,为 “数据结构多变、海量数据、高并发写入、水平扩展” 的互联网业务而生。为了与关系型数据库对齐,其事务功能是<span>后续版本通过迭代补全的特性,因其引擎本质不变,仍有先天局限性,会在性能和功能上存在不足。</span></span></span></span></span></span></p>
<h1><span><span>MongoDB 适用场景</span></span></h1>
<p><span>  MongoDB 凭借其灵活性和高性能,广泛应用于以下场景:</span></p>
<p><span><span>  - 互联网应用:用户画像、日志存储、社交网络动态等非结构化数据存储。</span></span></p>
<p><span><span>  - 游戏开发:文档模型与数据结构天然匹配,完美映射游戏复杂数据,单文档存储角色、装备、技能、任务等全量数据,能有效避免多表 JOIN,<span data-pm-slice="1 1 [&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{&quot;style&quot;:&quot;text-align: left;&quot;},&quot;namespaceURI&quot;:&quot;http://www.w3.org/1999/xhtml&quot;}]">高并发,性能好<span>。</span></span></span></span></p>
<p><span>  -<span>&nbsp;电商平台:商品信息、订单数据、用户行为轨迹分析。</span></span></p>
<p><span><span>  - 物联网:设备监控数据、传感器采集数据等数据的存储与实时分析。</span></span></p>
<p><span><span>  - 大数据场景:支持海量数据的快速写入和查询。</span></span></p>
<h1><span><span>MongoDB 不适用场景</span></span></h1>
<h2><span><span>高并发强事务数据一致性场景</span></span></h2>
<p><span><span>  比如金融系统中的账户转账、支付结算、信贷放款、账务清算;电商的订单支付 + 库存扣减 + 优惠券核销的联动操作等。虽然 MongoD<span data-pm-slice="1 1 [&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{&quot;style&quot;:&quot;text-align: left;&quot;},&quot;namespaceURI&quot;:&quot;http://www.w3.org/1999/xhtml&quot;}]">B<span>&nbsp;也支持事务,但属于“能用但不好用”的<span data-pm-slice="1 1 [&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{&quot;style&quot;:&quot;text-align: left;&quot;},&quot;namespaceURI&quot;:&quot;http://www.w3.org/1999/xhtml&quot;}]">状态(锁粒度导致事务性能不佳)<span>。</span></span></span></span></span></span></p>
<h2><span><span>复杂多表关联的密集查询场景</span></span></h2>
<p><span>  比如:复杂报表分析 、多维度联表查询、大规模数据统计分析。</span></p>
<h2><span><span>业务依赖高级特性支持</span></span></h2>
<p><span>  对于需要高级特性支持的应用,比如<span>,其<span>地理空间支持虽可用,但相比其他数据库(如 PostgreSQL 的 PostGIS )表现不足<span data-pm-slice="1 1 [&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{&quot;style&quot;:&quot;text-align: left;&quot;},&quot;namespaceURI&quot;:&quot;http://www.w3.org/1999/xhtml&quot;}]">。</span></span></span></span></p>
<h2><span data-pm-slice="1 1 [&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{&quot;style&quot;:&quot;text-align: left;&quot;},&quot;namespaceURI&quot;:&quot;http://www.w3.org/1999/xhtml&quot;}]"><span>未来有国产化需求的项目</span></span></h2>
<p><span data-pm-slice="1 1 [&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{&quot;style&quot;:&quot;text-align: left;&quot;},&quot;namespaceURI&quot;:&quot;http://www.w3.org/1999/xhtml&quot;}]"><span data-pm-slice="1 1 [&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{&quot;style&quot;:&quot;text-align: left;&quot;},&quot;namespaceURI&quot;:&quot;http://www.w3.org/1999/xhtml&quot;}]">  MongoDB 已经有对应的国产化版本,能够无缝平替,但国产化 MongoDB 的成本高,且小众,不一定能适用于所有国产化项目。MongoDB 数据到关系型数据迁移,虽然可行,但因为设计思路不同,如果不是预先就规划过迁移到关系型数据库的需求,并按 E-R 关系设计结构,就会导致后期需要拆表,迁移成本大幅提高,软件架构不适配等问题。</span></span></p>
<h1><span><span>小节</span></span></h1>
<p><span><span>  MongoDB 是一款开源、灵活、高性能的文档型 NoSQL 数据库,以 BSON 格式存储数据,核心优势在于灵活的文档模型、优异的高并发处理能力、便捷的水平扩展性和高可用性,贴近开发习惯,学习和运维成本较低。其设计初衷聚焦于数据结构多变、海量数据、高并发写入的互联网类场景,广泛应用于互联网、游戏、电商、物联网等领域。同时,MongoDB 也存在明显局限,在强事务一致性、复杂多表关联查询、高级企业级特性支持等场景中表现不足,且国产化适配仍有提升空间。</span></span></p>
<p><span>   整体而言,MongoDB 虽非“万能数据库”,但仍有掌握的必要,若业务以非结构化/半结构化数据为主、追求高并发和扩展性,不涉及强事务,数据量特别巨大<span data-pm-slice="1 1 [&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{&quot;style&quot;:&quot;text-align: left;&quot;},&quot;namespaceURI&quot;:&quot;http://www.w3.org/1999/xhtml&quot;}]">时<span>,MongoDB 是优选。</span></span></span></p>
<p><span>  在中大型项目中,多为关系型与非关系型混合使用,相比 <span data-pm-slice="1 1 [&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{&quot;style&quot;:&quot;text-align: left;&quot;},&quot;namespaceURI&quot;:&quot;http://www.w3.org/1999/xhtml&quot;}]">Elasticsearch,<span>MongoDB&nbsp;<span>契合个人 “快速上手、低成本学习” 和小微企业 “人力有限、资源不足、需求简单” 的核心诉求,因此学习和运维成本更低,更适合作为个人及小微企业的 NoSQL 首选数据库。</span></span></span></span></p>
<p>&nbsp;</p>
<p><span><span data-pm-slice="1 1 [&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{&quot;style&quot;:&quot;text-align: left;&quot;},&quot;namespaceURI&quot;:&quot;http://www.w3.org/1999/xhtml&quot;}]"><span><span>  我希望您喜欢这篇文章,并一如既往地感谢您阅读并与朋友和同事分享我的文章。</span></span></span></span></p>
<p><span><span data-pm-slice="1 1 [&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{&quot;style&quot;:&quot;text-align: left;&quot;},&quot;namespaceURI&quot;:&quot;http://www.w3.org/1999/xhtml&quot;}]"><span><span><img src="https://img2024.cnblogs.com/blog/270073/202509/270073-20250926105511928-738986494.webp" alt="me" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></span></span></span></span></p>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    <blockquote>
<p><strong>作者:</strong>MeteorSeed</p>
<p><strong>我希望您喜欢这篇博文,并一如既往地感谢您阅读并与朋友和同事分享我的博文。</strong></p>
<p><strong>转载请注明出处。</strong></p>
</blockquote><br><br>
来源:https://www.cnblogs.com/MeteorSeed/p/19588943
頁: [1]
查看完整版本: 【MongoDB】MongoDB 概述