
对数据进行聚合 *** 作,然后将计算之后的数据返回。聚合 *** 作将多个文档的值组合在依赖,并且可以对分组数据执行各种 *** 作返回单个结果。
MongoDB提供三种方式来执行聚合 *** 作:aggregation pipeline、map-reduce function、single purpose aggregation methods。
MongoDB 聚合 *** 作是在数据处理管道的逻辑上建模的。documents可以进入一个用于处理docuemnt然后返回聚合值的多阶段管道。
底层的管道提供了filters(类似于查询的 *** 作)和document transformations(修改document的输出形式) *** 作。
其他管道 *** 作为document指定具体的属性或者多个属性进行分组和排序,以及用array内容的聚合工具一样。管道的阶段可以使用运算符执行任务。
管道使用MongoDB自带的本地 *** 作来执行聚合 *** 作更高效,管道是MongoDB执行聚合 *** 作的首先。
聚合管道可以 *** 作分片collection。聚合管道可以通过使用索引来提高性能。聚合管道内部会进行优化阶段。
可以使用dbcollectionaggregate()的explain参数看到执行计划。
聚合管道来决定需要返回的字段。如果使用只需要的字段,这样可以减少数据量。
addFields + match放入到 addFields之前(如果是 project / $addFields的结果,就不能移动),减少数据量。
match: 先执行$match来减少数据量,然后在执行排序 *** 作。
match: 如果在前面添加$match *** 作,可以使用索引来减少数据 *** 作。
skip(在32开始可以使用):将 project *** 作之前,可以减少数据量。
通常情况下,在重新排序优化之后才会发生阶段合并。
limit:如果不能减少数据量,不会将这两个阶段合并。否则先进行排序,然后获取指定的数量,放入内存。如果在中间含有$skip *** 作,将其放入最后。
在数据量超过内存限制,这个 *** 作需要设置 allowDiskUse=true。
从MongoDB36开始,删除了aggregate的选项,将结果作为一条数据的返回。
aggregate可以返回cursor或者数据结果集。在返回的结果中,每个document的大小不能超过16M(这个限制只针对返回的document)。
documents有可能会超过这个限制,dbcollectionaggregate()默认返回cursor。
从MongoDB26开始,管道阶段的RAM限制为100M。如果超过限制,出错。如果为了处理大量的数据集,使用allowDiskUse选项开启管道阶段的聚合 *** 作将数据写入到临时文件。
从MongoDB34之后, graphLookup *** 作会忽略这个选项。如果其他阶段有aggregate() *** 作,allowDiskUse=true将会影响这些阶段。
从MongoDB32开始,如果按照分片来匹配值,只会在这个分片内进行计算。
聚合 *** 作在多个分片上执行 *** 作,如果没有指定主分片,这些 *** 作会被路由到其他分片上,来减少主分片的负载。
lookup阶段需要在主分片上执行查询。
将聚合管道拆分为两部分,这是为了在分片上执行优化。
*** 作可以 参考实例
MapReduce可以在分片上执行 *** 作,分片集合可以作为输入或者输出。
使用分片集合作为MapReduce输入源,mongos将作业并行派发到各个分片。mongos会等待所有的作业完成。
如果MapReduce的out字段有分片值,MongoDB使用_id字段作为分片的依据。
作为一个分片集合输出:
在 *** 作的过程中,mapreduce有很多锁:
相关 练习教程
分片(sharding)是一种跨多台机器分布数据的方法,MongoDB使用分片来支持具有非常大的数据集和高吞吐量 *** 作的部署。换句话说:分片就是将数据拆分,将其分散存在不同的机器上的过程,将数据分散到不同的机器上,不需要功能强大的大型计算机就可以存储更多的数据,处理更多的负载。
MongoDB分片集群包含以下组件:
下图描述了分片集群中组件的交互:
本文搭建的副本集集群是两个分片节点副本集(3+3)+一个配置节点副本集(3)+两个路由节点(2),共11个服务节点,具体如下图所示:
本次搭建一主一副本一仲裁,相关的配置文件、数据、日志都放在sharded_cluster相应的子目录下面,具体步骤如下:
myshardrs01
设置shardingclusterRole需要mongod实例运行复制。 要将实例部署为副本集成员,请使用
replSetName设置并指定副本集的名称。
使用客户端命令连接主节点,这里最好连接主节点
执行初始化副本集命令:
查看副本集情况:
同样搭建一主一副本一仲裁,相关的配置文件、数据、日志都放在sharded_cluster相应的子目录下面,
具体步骤如下:
myshardrs02
myshardrs01_27318
设置shardingclusterRole需要mongod实例运行复制。 要将实例部署为副本集成员,请使用
replSetName设置并指定副本集的名称
myshardrs01_27418
myshardrs01_27518
启动第二套副本集:一主一副本一仲裁
依次启动三个mongod服务:
查看服务是否启动:
新建或修改配置文件:
myconfigrs_27019:
新建或修改配置文件:
myconfigrs_27119
新建或修改配置文件:
myconfigrs_27219
依次启动配置的mongod副本集:一主两副本
查看服务是否启动:
以上就是关于云上MongoDB常见索引问题及最优索引规则大全全部的内容,包括:云上MongoDB常见索引问题及最优索引规则大全、MongoDB复制集/副本集(Replica Set)搭建、MongoDB Aggregation等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)