MongoDB

2021-03-01  本文已影响0人  EmmaQin

一、MongoDB特点

1.内置GridFS,支持大容量的存储:
GridFS是一个出色的分布式文件系统,可以支持海量的数据存储。
内置了GridFS了MongoDB,能够满足对大数据集的快速范围查询。

2.内置 Auto- Sharding 自动分片支持云级扩展性,分片简单。

3.海量数据下,性能优越:
在使用场合下,千万级别的文档对象,近10G的数据,对有索引的ID的查询不会比mysql慢,而对非索引字段的查询,则是全面胜出。 mysql实际无法胜任大数据量下任意字段的查询,而mongodb的查询性能实在让我惊讶。写入性能同样很令人满意,同样写入百万级别的数 据,mongodb比我以前试用过的couchdb要快得多,基本10分钟以下可以解决。补上一句,观察过程中mongodb都远算不上是CPU杀手。

4.全索引支持,扩展到内部对象和内嵌数组
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。

5.MapReduce 支持复杂聚合(Aggregation)

6.与关系型数据库相比,MongoDB的缺点:

4、可以定期运行db.repairDatabase()来整理记录,但这个过程会比较缓慢

二、下载安装

官网地址:https://www.mongodb.com/download-center#community
OS 使用brew安装:

brew install mongodb-community@4.4

启动

brew services start mongodb-community

连接MongoDB

本地:mongo
远程:mongodb://admin:123456@localhost:27017/

MongoDB概念

SQL术语 MongoDB术语 说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引

常用命令

索引

聚合和管道

三、副本集

见文章:副本集

四、MongoDB分片集群

见文章:MongoDB分片集群

五、数据备份(mongodump)和恢复(mongorestore)

MongoDB数据备份

在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。
mongodump命令可以通过参数指定导出的数据量级转存的服务器。
语法
mongodump命令脚本语法如下:

mongodump -h dbhost -d dbname -o dbdirectory

MongoDB数据恢复

mongodb使用 mongorestore 命令来恢复备份的数据。
语法
mongorestore命令脚本语法如下:

mongorestore -h <hostname><:port> -d dbname <path>

六、MongoDB监控

MongoDB中提供了mongostat 和 mongotop 两个命令来监控MongoDB的运行情况。

mongostat 命令

mongostat是mongodb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mongostat来查看mongo的状态。


mongotop 命令

mongotop也是mongodb下的一个内置工具,mongotop提供了一个方法,用来跟踪一个MongoDB的实例,查看哪些大量的时间花费在读取和写入数据。 mongotop提供每个集合的水平的统计数据。默认情况下,mongotop返回值的每一秒。


输出结果字段说明:

七、MongoDB 覆盖索引查询和高级索引

见文章:MongoDB覆盖索引查询和高级索引

八、MongoDB Map Reduce

Map-Reduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。
MongoDB提供的Map-Reduce非常灵活,对于大规模数据分析也相当实用。
MapReduce命令语法:

db.collection.mapReduce(
   function() {emit(key,value);},  //map 函数
   function(key,values) {return reduceFunction},   //reduce 函数
   {
      out: collection,
      query: document,
      sort: document,
      limit: number
   }
)

使用 MapReduce 要实现两个函数 Map 函数和 Reduce 函数,
Map 函数调用 emit(key, value), 遍历 collection 中所有的记录, 将 key 与 value 传递给 Reduce 函数进行处理。
Map 函数必须调用 emit(key, value) 返回键值对。
参数说明:

示例: demo_auto集合中筛选( gender: "女"),按name分组,计算 每个名字的人的个数。将结果放到集合total中

集合数据

db.getCollection("demo_auto").insert([ {
  _id: ObjectId("603746d62ff96a0006bea3d5"),
  name: "戚薇",
  gender: "女",
  age: "12"
} ]);
db.getCollection("demo_auto").insert([ {
  _id: ObjectId("603750ab5f3ee121e806620a"),
  name: "李沁",
  age: 10,
  gender: "女"
} ]);
db.getCollection("demo_auto").insert([ {
  _id: ObjectId("603774a85f3ee121e806620c"),
  gender: "男",
  name: "女"
} ]);
db.getCollection("demo_auto").insert([ {
  _id: ObjectId("603774a85f3ee121e806620c"),
  gender: "女",
  name: "大名"
} ]);
db.getCollection("demo_auto").insert([ {
  _id: ObjectId("603774a85f3ee121e806620c"),
  gender: "男",
  name: "AA"
} ]);

统计语句:

db.demo_auto.mapReduce(
  function() {emit(this.name, 1);},
  function(key, values) {return Array.sum(values)},
  {
      out: "total",
      query: {
          gender: "女"
      }
  }
)

流程:


九、MongoDB 全文检索

全文检索对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。
目前MongoDB全文索引,还不支持中文

示例

十、MongoDB 固定集合(Capped Collections)

MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素!

功能特点
用法

十一、MongoDB+Springboot

见文章:MongoDB+Springboot简单配置使用

上一篇下一篇

猜你喜欢

热点阅读