# MongoDB介绍 参考 [链接1](https://www.cnblogs.com/wywnet/p/5102946.html) [链接2](https://blog.csdn.net/qq_28550263/article/details/119892582) MongoDB为分布式文档数据库,属于一种NoSQL,它是最像关系型数据库的NoSQL MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。 MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档、数组及文档数组。 ## NoSQL介绍 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。 NoSQL主要是区分关系型数据库的一种数据库,关系型数据库典型代表就是MySQL,一个库里的多张表是有关系的,举个例子,对于电商网站来讲(就像淘宝),你购买一个商品 ,这个行为涉及到的表不止一个,比如商品表、订单表、仓储表、物流表等等,那么这些表彼此之间是有关联关系的,比如这些表里都有商品id。 而NoSQL就不存在这种错综复杂的关联关系,它的结构非常简单,就是单纯的类似key-value这样的形态。我们之前学过的Redis就属于NoSQL。 NoSQL数据库有一些特性: 可扩展、分布式计算、低成本、架构灵活、关系简单 ## MongoDB的应用场景 - 游戏场景 使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新 - 物流场景 使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。 - 社交场景 使用 MongoDB 存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能 - 物联网场景 使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析 - 视频直播 使用 MongoDB 存储用户信息、礼物信息等 总之,只要满足不使用关系型数据库的数据存储场景都可以用MongoDB代替。 如果你还在为是否应该使用 MongoDB,不如来做几个选择题来辅助决策 | 应用特征 | Yes / No| | :-----: | :------: | |应用不需要事务及复杂 join 支持| Yes| |新应用,需求会变,数据模型无法确定,想快速迭代开发|?| |应用需要2000-3000以上的读写QPS(更高也可以)|?| |应用需要TB甚至 PB 级别数据存储|?| |应用发展迅速,需要能快速水平扩展|?| |应用要求存储的数据不丢失|?| |应用需要99.999%高可用|?| |应用需要大量的地理位置查询、文本查询|?| - 如果上述有1个 Yes,可以考虑 MongoDB,2个及以上的 Yes,选择MongoDB绝不会后悔。 ## MongoDB和SQL对比 ![](./1.png) ![](./2.png) ![](./3.png)