MongoDB简介及应用场景
<p> 传统的关系型数据库(如MySQL),在数据操作的“三高”需求以及应对Web2.0的网站需求面前,显得力不从心。而MongoDB可应对“三高”需求。“三高”需求:</p><p>(1)High performance - 对数据库高并发读写的需求。</p>
<p>(2)Huge Storage - 对海量数据的高效率存储和访问的需求。</p>
<p>(3)High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求。 而MongoDB可应对“三高”需求。</p>
<h3 class="article-title" data-spm-anchor-id="a2c6h.12873639.article-detail.i3.4dcc4e4etu9wR9">什么场景应该用 MongoDB ?</h3>
<p>MongoDB 的应用已经渗透到各个领域,比如游戏、物流、电商、内容管理、社交、物联网、视频直播等,以下是几个实际的应用案例。</p>
<ul data-spm-anchor-id="a2c6h.12873639.article-detail.i4.4dcc4e4etu9wR9">
<li>游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新</li>
<li data-spm-anchor-id="a2c6h.12873639.article-detail.i2.4dcc4e4etu9wR9">物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。</li>
<li>社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能</li>
<li>物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析</li>
<li>视频直播,使用 MongoDB 存储用户信息、礼物信息等。</li>
</ul>
<p>这些应用场景中,数据操作方面的共同特点是:</p>
<p>(1)数据量大</p>
<p>(2)写入操作频繁(读写都很频繁)</p>
<p>(3)价值较低的数据,对事务性要求不高 对于这样的数据,我们更适合使用MongoDB来实现数据的存储。</p>
<h4>辅助决策</h4>
<p>如果你还在为是否应该使用 MongoDB,不如来做几个选择题来辅助决策</p>
<p>(注:以下内容改编自 MongoDB 公司 TJ 同学的某次公开技术分享)。</p>
<p><img src="https://img2023.cnblogs.com/blog/1735743/202304/1735743-20230428154322305-1499789968.png" alt="" width="572" height="371" loading="lazy"></p>
<p>如果上述有1个 Yes,可以考虑 MongoDB,2个及以上的 Yes,选择MongoDB绝不会后悔。</p>
<h3>MongoDB简介</h3>
<div> MongoDB是一个<span style="color: rgba(255, 0, 0, 1)">开源、高性能、无模式的文档型数据库</span>,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种。是最像关系型数据库(MySQL)的<span style="color: rgba(255, 0, 0, 1)">非关系型数据库</span>。 它<span style="color: rgba(255, 0, 0, 1)">支持的数据结构非常松散,是一种类似于 JSON 的 格式叫BSON</span>,所以它既可以存储比较复杂的数据类型,又相当的灵活。</div>
<div> MongoDB中的记录是一个文档,它是一个由字段和值对(field:value)组成的数据结构。MongoDB文档类似于JSON对象,即一个文档认为就是一个对象。字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档、普通数组和文档数组。</div>
<h3>体系结构</h3>
<p>MySQL和MongoDB对比</p>
<p><img src="https://img2023.cnblogs.com/blog/1735743/202304/1735743-20230428161048312-2056386348.png" alt="" width="652" height="474" loading="lazy"></p>
<h4>数据模型</h4>
<p> MongoDB的最小存储单位就是文档(document)对象。文档(document)对象对应于关系型数据库的行。数据在MongoDB中以 BSON(Binary-JSON)文档的格式存储在磁盘上。</p>
<p>BSON(Binary Serialized Document Format)是一种类json的一种二进制形式的存储格式,简称Binary JSON。BSON和JSON一样,支持 内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。</p>
<p>BSON采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的三个特点,可以有效描述非结构化数据和结构化数据。这种格式的优点是灵活性高,但它的缺点是空间利用率不是很理想。</p>
<p>Bson中,除了基本的JSON类型:string,integer,boolean,double,null,array和object,mongo还使用了特殊的数据类型。这些类型包括 date,object id,binary data,regular expression 和code。每一个驱动都以特定语言的方式实现了这些类型,查看你的驱动的文档来获取详 细信息。</p>
<p>BSON数据类型参考列表:</p>
<p><img src="https://img2023.cnblogs.com/blog/1735743/202304/1735743-20230428163656218-1316936233.png" alt="" width="625" height="453" loading="lazy"></p>
<p> 提示: shell默认使用64位浮点型数值。{“x”:3.14}或{“x”:3}。对于整型值,可以使用NumberInt(4字节符号整数)或NumberLong(8字节符 号整数),{“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)}</p>
<h3>MongoDB的优点</h3>
<p><span><span>MongoDB 为需要可靠数据库的公司提供了众多优势。</span><span>以下是使用 MongoDB 的一些好处:</span></span></p>
<ul>
<li>速度<span><span>:MongoDB</span><span>比一般的关系数据库</span></span>快 100 倍。<span><span>作为一个面向文档的数据库,MongoDB 通过索引使访问文档变得容易。</span><span>这有助于快速查询响应,从而节省用户宝贵的时间。</span></span></li>
<li>分片<span><span>:MongoDB 提供的另一个好处是它允许用户存储大量数据。</span><span>这是通过将数据分发到连接到应用程序的多个服务器来完成的。</span><span>如果一台服务器无法处理数据的大小,则通过称为自动分片的过程将其共享给另一台服务器。</span></span></li>
<li>灵活的数据库<span><span>:MongoDB 允许用户在单独的文档中拥有不同类型的数据,因为它是一个无模式的数据库。</span><span>这为其用户提供了高度的灵活性和存储任何类型数据的自由。</span></span></li>
<li>水平可扩展性<span><span>:MongoDB 是一个可水平扩展的数据库,这是它的基本优势之一。</span><span>它允许用户有效地将大量数据分发到多台机器。</span></span></li>
<li>事务可行性<span>:一些 MongoDB 功能包括</span>gridFS 和 Replication<span><span>。</span><span>这些功能支持在使用 MongoDB 时提高数据可用性。</span><span>这确保了应用程序的性能非常高。</span></span></li>
<li>缺少模式<span><span>:MongoDB 是 NoSQL,这意味着它不需要模式。</span><span>因此,在使用 MongoDB 时无需概述数据库模式。</span><span>这减少了数据库处理信息所需的时间。</span><span>因此,您的架构将由您编写的算法定义。</span></span></li>
</ul>
<h3 id="t4"><span>MongoDB 的局限性</span></h3>
<p><span><span>尽管 MongoDB 提供了优于其他数据库的显着优势,但它并不完美。</span><span>它有一些需要改进的限制。</span><span>以下是 MongoDB 的一些缺点。 </span></span></p>
<ul>
<li>不支持连接<span><span>:与支持连接的理性数据库不同,MongoDB 不支持。</span><span>虽然可以通过手动编码添加连接功能,但执行速度可能会很慢并影响性能。</span></span></li>
<li>高内存使用率<span><span>:MongoDB 旨在为每个值对存储键名称。</span><span>它还受到数据冗余的影响,因为它缺少连接功能。</span><span>这会导致高内存使用率。</span></span></li>
<li>有限数据大小<span>:MongoDB 允许的最大文档大小为</span>16MB<span><span>。</span><span>这是一个需要纠正的严峻挑战。</span></span></li>
<li>有限嵌套<span>:MongoDB 提供有限的嵌套访问,因为用户不能执行超过</span>100 级的文档嵌套<span>。</span></li>
</ul>
<h3><span>补充理解</span></h3>
<div class="group w-full text-gray-800 dark:text-gray-100 border-b border-black/10 dark:border-gray-900/50 dark:bg-gray-800">
<div class="flex p-4 gap-4 text-base md:gap-6 md:max-w-2xl lg:max-w-xl xl:max-w-3xl md:py-6 lg:px-0 m-auto">
<div class="relative flex w- flex-col gap-1 md:gap-3 lg:w-">
<div class="flex flex-grow flex-col gap-3">
<div class="min-h- flex flex-col items-start gap-4 whitespace-pre-wrap break-words">怎么理解MongoDB 允许用户在单独的文档中拥有不同类型的数据,因为它是一个无模式的数据库。这为其用户提供了高度的灵活性和存储任何类型数据的自由?</div>
<div>
<p><img src="https://img2023.cnblogs.com/blog/1735743/202306/1735743-20230601110047584-1064637024.png" alt="" loading="lazy"></p>
<p><strong> 举个例子说明</strong></p>
</div>
</div>
<div class="text-gray-400 flex self-end lg:self-center justify-center mt-2 gap-2 md:gap-3 lg:gap-1 lg:absolute lg:top-0 lg:translate-x-full lg:right-0 lg:mt-0 lg:pl-2 visible"> 当使用MongoDB存储博客平台的数据时,以下是一个可能的示例:
<p>假设我们有一个名为"posts"的集合,用于存储博客文章。每篇文章可以具有不同的字段和结构</p>
<p>1.第一篇文章的文档可能如下所示:</p>
</div>
<div class="flex justify-between lg:block">
<p><img src="https://img2023.cnblogs.com/blog/1735743/202306/1735743-20230601110146655-220648846.png" alt="" loading="lazy"></p>
<p> 这篇文章有一个标题(title)字段,内容(content)字段,作者(author)字段,标签(tags)字段,日期(date)字段和浏览次数(views)字段。</p>
<p>2.第二篇文章的文档可能如下所示:</p>
<div class="bg-black rounded-md mb-4">
<p><img src="https://img2023.cnblogs.com/blog/1735743/202306/1735743-20230601110210000-1450454671.png" alt="" loading="lazy"></p>
<p> 这篇文章与第一篇文章不同,它有一个不同的字段结构。它有一个标题(title)字段,内容(content)字段,作者(author)字段,分类(categories)字段,日期(date)字段和点赞数(likes)字段。</p>
<p> 通过这个例子,您可以看到MongoDB允许在同一个集合中存储具有不同结构和字段的文档。这使得存储博客文章的集合非常灵活,可以根据每篇文章的特定要求自由定义字段。这种灵活性使得开发人员能够根据应用程序的需求轻松地修改和扩展数据模型。</p>
</div>
</div>
</div>
</div>
</div>
<h3> 参考</h3>
<p><span style="color: rgba(0, 0, 255, 1)"><span style="color: rgba(0, 0, 255, 1)">最佳 7 个真实世界 MongoDB 用例</span></span></p>
<p class="article-title" data-spm-anchor-id="a2c6h.12873639.article-detail.i3.4dcc4e4etu9wR9"><span style="color: rgba(0, 0, 255, 1)"><span style="color: rgba(0, 0, 255, 1)">什么场景应该用 MongoDB ?</span></span></p>
</div>
<div id="MySignature" role="contentinfo">
希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。更多好文推荐,请关注我的微信公众号--JustJavaIt<br><br>
来源:https://www.cnblogs.com/liaowenhui/p/17362409.html
頁:
[1]