Mongodb中Mapreduce特性与原理

MapReduce 分布式计算是一种计算方法和集中式计算是相对的随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成。分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率。Hadoop MapReduce是一个分布式计算框架,用于青松编写分布式应用程序,这些应用程序以可靠,容错的方式并行处理大型硬件集群(数千个节点)上的大量数据(多TB数据集)。... 阅读详情

    对于每个从事数据技术的人才而言,mapreduce都不陌生,简单而言就是一种大数据计算、分类、分析的一个编程模式,目前很多大数据存储平台都支持mapreduce,比如hadoop、hbase等等,也有很多采用了类似于mapreduce的算法的其他数据计算平台,关于mapreduce的原理不再赘言,我们直接来了解mongodb中如何使用mapreduce。

 

    Mongodb中提供了2种对大数据计算的方式:aggregate和mapreduce,严格意义上说mapreduce也是一种“aggregation”算法,只是这两种方式使用起来差距甚远,设计理念也不同,所以我们分开来介绍,aggregate请参考【aggreate】,本文重点介绍mapreduce。

 

    mapreduce有2个阶段:map和reduce;mapper处理每个document,然后emits一个或者多个objects,object为key-value对;reducer将map操作的结果进行联合操作(combine)。此外mapreduce还可以有一个finalize阶段,这是可选的,它可以调整reducer计算的结果。在进行mapreduce之前,mongodb支持使用query来筛选文档,也支持sort排序和limit。

    mapreduce使用javascript语法编写,其内部也是基于javascript V8引擎解析并执行,javascript语言的灵活性也让mapreduce可以处理更加复杂的业务场景;当然这相对于aggreation pipleine而言,意味着需要书写大量的脚本,而且调试也将更加困难。(调试可以基于javascript调试,成功后再嵌入到mongodb中)我们来展示一个例子:

    我们想统计每个品类下商品的总量,SQL语义为:

SELECT COUNT(1) FROM products group by category_id

 

     原始数据格式:

{_id:1,"categoryId" : 1 , "productId":100010,"amount" : 200}
{_id:1,"categoryId" : 1, "productId": 100011,"amount" : 300}

 

    mapreducey语句范例:

db.products.mapReduce(
	function(){
    	emit(this.categoryId,1);
	},
	function(key,values){
		return Array.sum(values);
	},
	{
		out:"result001",
	}

)

 

    JAVA代码示例:

String mapper = "function() {" +
        "emit(this.categoryId,1);" +
        "}";
String reducer = "function(key,values){" +
        "return Array.sum(values);" +
        "}";
collection.mapReduce(mapper, reducer)
        .databaseName("test")   //结果保存在”test“数据库中,默认为当前数据库
        .collectionName("result") //指定结果保存的collection,默认为inline模式,不保存,直接通过cursor输出
        .action(MapReduceAction.REPLACE) //结果保存方式,如果”result“表存在,则替换。
        .nonAtomic(false) //是否为”非原子性“
        .sharded(false) //结果collection是否为sharded
        .maxTime(180,TimeUnit.SECONDS) //mapreduce执行的最大时间
        .iterator() //触发执行,这句话千万别忘了,否则不会执行
        .close(); //我们不需要cursor,则直接关闭
//此后即可通过result collection获取数据统计的结果

 

    统计结果示例:

{ "_id" : 1000, "value" : 100 }
{ "_id" : 1001, "value" : 100 }
{ "_id" : 1002, "value" : 100 }
{ "_id" : 1003, "value" : 100 }
{ "_id" : 1004, "value" : 100 }

     

    通过此例,我们简单的了解了mapreduce的编程方式,其实也是很简单的,如果你从事过javascript开发,你会发现书写mapper和reducer脚本也并不困难,况且javascript内置的大量函数库也可以提供便利。

    

    一个mapreduce就像aggregation中的一次group,如果你的统计结果需要多次group,那么可能需要多个mapreduce;这和aggregate pipleline相比就没有那么简便了。但是mapreduce可以写的非常复杂,处理一些比较棘手的业务性逻辑,这在aggregate中反而不行,因为aggregate支持的“计算表达式”比较有限,和javascript的方法库相比相差太远。mapreduce可以读取sharding collection中的数据,而且可以将output结果输出到sharding collection中,但是aggregate不支持这个特性。

 

一、编程语法

    在mongodb中,mapreduce除了包含mapper和reducer之外,还包含其他的一些选项,不过整体遵循mapreduce的规则:

    1、map:javascript方法,此方法中可以使用emit(key,value),一次map调用中允许返回调用多次emit(也可以不调用),它不需要返回值;其中key用来分组,value将来会被传递给reducer用于“聚合计算”。每条document都会调用一次map方法。

    mapper中输入的是当前document,可以通过this.<filedName>来获取字段的值。mapper应该是封闭的,它不能访问外部资源,比如collection、database,不能修改外部的值,但允许访问“scope”中的变量。emit的值不能大于16M,即document最大的尺寸,否则mongodb将会抛出错误。

function() {
    this.items.forEach(function(item) {emit(item.sku,1);});//多次emit
}

 

    2、reduce:javascript方法,此方法接收key和values两个参数,经过mapper处理和“归并之后”,一个key将会对应一组values(分组,key:values),此values将会在reduce中进行“聚合计算”,比如:sum、平均数、数据分拣等等。

    reducer和mapper一样是封闭的,它内部不允许访问database、collection等外部资源,不能修改外部值,但可以访问“scope”中的变量;如果一个key只有一个value,那么mongodb就不会调用reduce方法。可能一个key对应的values条数很多,将会调用多次reduce,即前一次reduce的结果可能被包含在values中再次传递给reduce方法,这也要求,reduce返回的结果需要value的结构保持一致。同样,reduce返回的数据尺寸不能大于8M(document最大尺寸的一半,因为reduce的结果可能会作为input再次reduce)。

//mapper
function() {
    emit(this.categoryId,{'count' : 1});
}
//reducer
function(key,values) {
    var current = {'count' : 0};
    values.forEach(function(item) { current.count += item.count;});
    return current;
}

 

    此外reduce内的算法需要是幂等的,且与输入values的顺序无关关的,因为即使相同的input文档,也无法保证map-reduce的每个过程都是逐字节相同的,但应该确保计算的结果是一致的。

    3、out:document结构,包含一些配置选项;用于指定reduce的结果最终如何保存。可以将结果以inline的方式直接输出(cursor),或者写入一个collection中。

out : {
    <action> : <collectionName>
    [,db:<dbName>]
    [,sharded:<boolean>]
    [,nonAtomic:<boolean>]
}

 

    out方式默认为inline,即不保存数据,而是返回一个cursor,客户端直接读取数据即可。

    <action>表示如果保存结果的<collection>已经存在时,将如何处理:1)replace:替换,替换原collection中的内容;先将数据保存在临时collection,此后rename,再将旧collection删除 2)merge:将结果与原有内容合并,如果原有文档中持有相同的key(即_id字段),则直接覆盖原值  3)reduce:将结果与原有内容合并,如果原有稳重中有相同的key,则将新值、旧值合并后再次应用reduce方法,并将得到的值覆盖原值(对于“用户留存”、“数据增量统计”非常有用)。

    db:结果数据保存在哪个database中,默认为当前db;开发者可能为了进一步使用数据,将统计结果统一放在单独的database中。

    sharded:输出结果的collection将使用sharding模式,使用_id作为shard key;不过首先需要开发者对<collection>所在的database开启sharding,否则将无法执行。

    nonAtomic:“非原子性”,仅对“merge”和“replace”有效,控制output collection,默认为false,即“原子性”;即mapreduce在输出阶段将会对output collection所在的数据库加锁,直到输出结束,可能会性能会有影响;如果为true,则不会对db加锁,其他客户端可以读取到output collection的中间状态数据。我们通常将ouput collection单独放在一个db中,和application数据分离开,而且nonAtomic为false,我们也不希望用户读到“中间状态数据”。

 

    可以通过指定“out:{inline : 1}”将输出结果保存在内存中,并返回一个cursor,客户端可以直接读取即可。

 

    4、query:筛选文档,只需要将符合条件的documents传递给mapper。

    5、sort:对刷选之后的文档排序,然后才传递给mapper。如果根据map的key进行排序,则可以减少reduce的操作次数。排序必须能够使用index。

    6、limit:限定输入到map的文档条数。

    7、finalize:终结操作,在输出之前调整reduce的结果。它和map、reduce一样,也是一个javascript方法,接收key和value,其中value为reduce输出结果,finalize方法中可以修改value的值作为最终的输出结果:

function(key,value) {
    var final = {count : 0,key:""};
    final.key = key;
    return final;
}

 

    8、scope:document结构,保存一些global级别的变量值,它们可以在map、reduce、finalize中被访问。

//java代码
Document scope = new Document("off",0.5);
String finalize = "function(key,value) {" +
                "return value.count * off;" +
                "}";

 

    9、jsMode:可选值为true或者false;表示是否将map执行的中间结果数据有javascript对象转换成BSON对象,默认为false。false表示,在mapper中emit最终输出的是javascript对象,因为是javascript引擎处理的,不过mapper 可能产生大量的数据,这些数据将会被保存在临时的存储中(collection),所以需要将javascript对象转换成BSON;在reduce阶段,这些BSON结果在被转换成javascript对象,传递给reduce方法,转换意味着性能消耗和慢速,它解决的问题就是“临时存储”以适应较大数据集的数据分析。如果为true,将不会进行类型转换,数据被暂存在内存中,reduce阶段直接使用mapper的结果即可,但是key的个数不能超过50W个。在production环境中,此值建议为false。

 

    在map、reduce、finalize中,我们自始至终都不要尝试去改变key的值,这会导致错误。

 

二、基本原理

    1、过程与原理

    mongodb 2.4之后,可以多线程运行javascript操作,即允许多个mapreduce同时并行执行;不过在2.4之前,则是单线程运行,即每个mongod上同时只能有一个mapreduce运行,所以并发能力很弱,建议开发者升级到最新的版本。

    mapreuce可以从sharding collection中读取数据,也可以将结果写入到sharding collection中;但是aggregate则不能将结果写入到sharding collection中。

 

    1)mongos接收到mapreduce的操作请求后,根据query条件,将map-reduce任务发给持有数据的shards(sharding collection将会被分裂成多个chunks并分布在多个shards中,shard即为mongod节点)。

    2)每个shards都依次执行mapper和reducer,并将结果写入到本地的临时collection中,结果数据是根据_id(即reducer的key)正序排列。

    3)当所有的shards都reduce完成之后,将各自结果数据中_id的最大值和最小值(即min、max key)返回给mongos。

    4)mongos负责shuffle和partition,将所有shards反馈的min、max key进行汇总,并将整个key区间分成多个partitions,每个partition包含[min,max]区间,此后mongos将partiton信息封装在finalReduce指令中并发给每个shard,最终每个shard都会收到一个特定的partition的任务;partition不会重叠。

    5)此后每个shard将与其他所有的shards建立链接,根据partition信息,从min到max,遍历每个key。对于任何一个key,当前shard都将从其他shards获取此key的所有数据,然后后执行reduce和finalize方法,每个key可能会执行多次reduce,这取决于values的条数,但是finalize只会执行一次,最终将此key的finalize的结果通过本地方式写入sharding collection中。

    6)当所有的shards都处理完毕后,mongos将处理结果返回给客户端(inline)。

 

    在mapper时,mapper的结果首先放在内存中,当内存的数据量达到阀值会将执行一次reduce并写入临时文件。

                   ------------
                   |  mongos  |
                   ------------
                        |
                    mapreduce
                        |
------------                    ------------
|  shard   |                    |   shard  |
------------                    ------------
      |                               |
   map+redue                       map+reduce
      |                               |
------------                    ------------
|  _chunk  |                    |  _chunk  |
------------                    ------------
      |                               |
 [min1~max1]                     [min2~max2]
                        |
                  ------------
                  |  mongos  |
                  ------------
                        |
                    partitions
                        |  
 [min1'~max1']                  [min1'~max2']      
      |                               |
  finalReduce                     finalReduce    
      |                               |
------------                     ------------
|  _chunk  |      <--read-->     |  _chunk  |
------------                     ------------
      |                               |
  finalize                         finalize       -->write once for each key
      |                               |
    write                           write         -->locally write
                        |
                  ------------
                  | sharding |
                  ------------

 

    在mongodb2.0版本中,finalReduce步骤将有mongos执行,即所有的shards执行完mapreduce之后,由mongos负责读取所有shards的结果并在本地进行merge和sort,然后执行finalReduce和finalize过程,这中方式并不会带来太大问题,消耗内存也小,但是会增加mongos的负担,影响应用数据的并发能力。经过2.4版本改进后(上述),性能得到很大的提高。

    在mapreduce执行过程中,将会阻止balancer“迁移”chunks(sharding balancer机制);对于输出结果是sharding collection,在finalReduce期间,其chunks也不会被迁移,直到运行结束。主要是为了避免并发操作带来的问题。

 

    2、并发性

    我们都知道,mongodb中所有的读写操作都会加锁(意向锁),mapreduce也不例外。mapreduce涉及到mapper、reducer,中间过程还会将数据写入临时的collection中,最终将finalize数据写入output collection。read阶段将会使用读锁(读取chunks中的数据),每处理100条documents后重新获取锁(yields)。写入临时collectin使用写锁,这个不会涉及到锁的竞争,因为临时collection只对自己可见。在创建output collection时会对DB加写锁,如果output collection已经存在,且action为“replace”时,则会获取一个global级别的写锁,此时将会阻塞mongod上的所有操作(影响很大),主要是为了让数据结果为atomic;如果action为“merge”或者“reduce”,且“nonAtomic”为true是,只会在每次写入数据时才会获取写锁,这对性能几乎没有影响。

    如果你每次mapreduce的结果都会写入到一个新的collection,则建议将“nonAtomic”设置为true,可以避免这个全局锁的问题。参见源码【mongo/db/commons/mr.cpp】

 

    由上述原理可知,在mapper阶段为了压缩内存数据,在写入临时文件时也会执行一次reducer,在reduce阶段如果某个key对象的values较多,也会多次执行reducer;这也要求reducer返回结果必须和mapper emit的结果类型保持一致,同时保证reducer中的算法是幂等的,即多次运行结果应该一致,不依赖于reducer执行的次数和传递mapper结果的顺序。

 

三、其他

    1、mapreduce脚本是基于javascript,为了便于运行和维护,我们通常将这些脚本保存在db中,比如mysql或者mongodb中,在运行mapreduce是从db中获取即可,然后传递给mapreduce方法。

    2、一个mapreduce,只能执行产生一个“group”结果,如果你的数据分析中,需要多次group,那么可能需要将开发多个mapreduce,并将它们串联起来。(需要开发一个管理任务有向图的工具)。

 

    

 

mongodb学习笔记 启动mongodb通过mongod启动mongodb服务 mongod参数选项[root@primary bin]# ./mongod –help -h [ --help ] 帮助信息 --version 版本信息 -f [ --config ] arg 配置文件选项 -v [ --verbose ] 提高内部报告标准输出或记录到l 阅读详情

相关推荐

MongoDB中的MapReduce简介

MongoDB MapReduce MapReduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。这样做的好处是可以在任务被分解后,可以通过大量机器进行并行计算,减少整个操作的时间。 上面是MapReduce的理论部分,下面说实际的应用,下面以MongoDB MapReduce为例说明。 下面是MongoDB官方的一个例子: 代码如下: > db.things.insert( { _id : 1, tags : [‘dog’, ‘cat’] } ); > db.things.insert( { _id : 2, tags

以WordCount为例对MapReduce进行详解

第一阶段:上传文件到hdfs client端带上文件的内容和大小(假如300M)向yarn(ResourceManger,维护着一个列表,列表中记录着各个数据节点当前的状况,DataNode是否还活着,空间剩余,是否有任务进行中)请求上传该文件,yarn接收到请求后会根据文件的大小计算最少需要几个DataNode(128M,128M,44M需要三个,),同时去寻找相对比较闲置的DataNode作为计算节点,并把每个文件片存储和备份的DN号(通常两个DN号是不一样的)作为信息返回给client端,client

dontlikerabbit的博客 528

基于NXP i.MX RT1180的无传感器FOC电机驱动实战指南

磁场定向控制(FOC)是一种先进的电机控制技术,它通过精密的数学变换,将三相交流电机的控制解耦为独立的转矩和磁场分量,从而实现高效、平稳、低噪音的驱动。其核心原理在于利用Park/Clark变换,在旋转坐标系下对电流进行线性控制。这项技术的价值在于显著提升了永磁同步电机(PMSM)的效率与动态性能,广泛应用于机器人、无人机和工业自动化等高精度场景。本文聚焦于利用NXP i.MX RT1180跨界处理器及其MCUXpresso SDK,快速实现一套完整的无传感器FOC解决方案。通过解析硬件平台选型、软件架构,

weixin_33925615的博客 304

MongoDB Map Reduce

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

书香水墨 650

从时频谱图到智能感知:雷达信号处理的AI进化之路

本文探讨了人工智能在雷达信号处理中的革命性应用,特别是深度学习在时频谱图分析中的突破性进展。通过对比传统信号处理方法与AI驱动的解决方案,展示了CNN、3D CNN等模型在目标检测、行为识别等场景中的优势,并分析了数据获取、模型优化等关键技术挑战。AI赋能的雷达技术已广泛应用于智能交通、工业检测和医疗健康领域,展现出巨大的发展潜力。

weixin_29284201的博客 507

STM32N6实战:FSBL引导XIP运行ThreadX与NetX Duo

在嵌入式系统开发中,程序的存储与执行方式直接影响启动速度和系统实时性。传统MCU常将代码拷贝到内存运行,而高主频处理器则可通过XIP(片外Flash原地执行)技术直接从外部存储取指,省去拷贝过程。但XIP的前提是外部存储器控制器需在上电后第一时间完成初始化,这正是FSBL(第一级引导程序)的核心职责。FSBL负责配置时钟与外部Flash,并将控制权移交给应用。而要让设备具备实时调度与网络能力,可搭配ThreadX实时内核和NetX Duo双协议栈,两者在CubeMX中原生集成,形成一套高性能MCU+外部存储

weixin_29191669的博客 319

Hadoop的启动和停止说明

sbin/start-all.sh 启动所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、ResourceManager、NodeManager sbin/stop-all.sh 停止所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、ResourceManager、Nod...

aabb7654321的博客 4076

告别PS串口焦虑:深入解析AXI Uartlite IP核如何将ZYNQ PL任意引脚变成串口(从Vivado约束到驱动文件全解析)

本文深入解析AXI Uartlite IP核如何将ZYNQ PL任意引脚变成串口,从Vivado约束到驱动文件全解析。通过AXI Uartlite IP核,开发者可以突破PS端UART数量限制,实现高效串口通信。文章详细介绍了IP核架构、Vivado工程配置、驱动开发及调试技巧,帮助开发者快速掌握这一技术。

weixin_33736649的博客 468

MongoDB课程

第一部分 MongoDB体系结构 1.1 NoSQL 和 MongoDB NoSQL=Not Only SQL,支持类似SQL的功能, 与Relational Database相辅相成。其性能较高,不使用SQL意味着没有结构化的存储要求(SQL为结构化的查询语句),没有约束之后架构更加灵活。 NoSQL数据库四大家族 列存储 Hbase,键值(Key-Value)存储 Redis,图像存储 Neo4j,文档存储MongoDB MongoDB 是一个基于分布式文...

weixin_41274719的博客 718

一文读懂AI协同办公领域发展和趋势

协同办公,又称OA,是指企业内部或外部各类人员之间利用信息技术来进行协作工作的一种形式。这种协作工作既可以由直接员工进行,也可以来自外部的咨询机构、合作伙伴或联营企业。协同办公的优势在于可以对资源进行有效管理和配置,各部门之间可以建立良好的协作关系,跨部门更好地实现资源共享。

女王の专属领地 2361

YOLO26改进策略【YOLO和Mamba】| CVPR 2025:EfficientViM 压缩隐藏状态空间进行通道混合、单头设计减少内存操作,提升目标检测效率与精度

本文记录的是利用模块优化的目标检测网络模型。EfficientViM Block(基于隐藏状态混合器的状态空间对偶性模块) 的设计旨在,提升特征提取效率,同时兼顾全局依赖捕捉与局部细节保留。本文将深入研究的原理,并将其应用到中,通过重构特征提取流程、减少内存绑定操作、融合多阶段特征,增强模型在资源受限环境下的检测性能与速度。EfficientViM: Efficient Vision Mamba with Hidden State Mixer based State Space DualityEfficie

Limiiiing的博客 399

MongoDB 初学

大致看了一点 MongoDB. 回忆一下,这个数据库有这样一些特征: Schema-less: 不需要预先定义 schema. 数据以 document 的方式存储,document 大致上相当于关系数据库中的一行记录。document 存放在 collection 中间(相当于关系数据库的 table)。document 里的每个 field 都可以建索引。 MongoDB 的特性...

weixin_34248487的博客 74

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

蚂蚁小兵 2466

大数据 hadoop 经典面试题 | 三

1、MapReduced的工作流程 输入分片(inputsplit):在进行map计算之前,mapreduce会根据输入文件计算输入分片(input split),每个输入分片(input split)针对一个map任务;存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组,输入分片(input split)往往和hdfs的block(块)关系很密切 map阶段:程序员编写好的map...

彷徨的博客 1836

Android 13 灭屏音乐播放问题解决与优化建议

通过在中增加对音乐播放状态的检测,我们成功解决了客户应用在灭屏状态下音乐播放被中断的问题。

m0_60898338的博客 1157

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

MongoDB MapReduce 深入解析

在处理大规模数据集时,尤其是在MongoDB这样的NoSQL数据库中,我们常常会遇到需要对数据进行复杂查询和聚合操作的需求。例如,假设我们有一个包含用户购买记录的数据库集合,我们需要统计每个用户的总消费金额以及消费次数。这样的操作如果使用传统的查询方法可能会非常复杂,且效率低下。这时,MapReduce作为一种强大的数据处理工具,就能发挥其优势。MapReduce在MongoDB中扮演着至关重要的角色,它允许我们以分布式的方式处理数据,从而提高处理速度和效率。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 896

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MongoDB中的MapReduce详解

MongoDB作为一种流行的NoSQL数据库,提供了多种数据处理和分析的方式,其中MapReduce是一种强大的工具,用于处理大规模数据集。在MongoDB中,MapReduce可以使用JavaScript编写的Map和Reduce函数来处理集合中的数据。例如,可以对每个文档生成一个键值对,键是某个字段的值,值是文档的计数。例如,可以将相同键的值加起来,计算总数。:MapReduce提供了强大的数据处理能力,用户可以根据需要自定义Map和Reduce函数,处理复杂的数据聚合和分析任务。

My_wife_QBL的博客 1415

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

MongoDB的几个特性

一、主从 1、主从配置 mongodb提供主从配置,主从配置需要两个数据库节点,可以在不同的两台机器,也可以在同一台机器(可使用--dbpath参数指定数据库目录)。主 数据库会记录在其上的所有操作oplog,从数据库定期轮询主数据库获取这些操作,然后对自己的数据副本执行这些操作,从而保证主从数据的一致性。 2、互为主从 数据库自动协调某个时间点上的主从关系。一开始,数据库会判断哪个为主

kelindame的专栏 3672

map型字段 mongodb_关于mongodb的mapReduce

由于nodejs本身的限制,在程序中使用js进行大批量计算效率不高。而V8引擎自身对内存大小的限制(64位系统下1.4G),同样限制了数据规模。因此,相对于从mongodb中抽出数据进行计算,在mongodb中利用聚合函数或者其他方法完成计算,避开nodejs自身限制的方案在可靠性和扩展性上都相对较为令人满意。mongodb支持类似SQL中的聚合函数,虽然语法不通,不过基本原理类似。mongodb...

weixin_39927508的博客 207

MongoDB中的MapReduce框架初探

引言 MapReduce是一种并行计算的编程思想,在大数据领域得到了广泛的应用。MapReduce将计算过程分为“Map”和“Reduce”两个阶段,将程序部署在分布式系统上,可以大大提升计算效率。 —— [ 百度百科 ] MongoDB作为一种优秀的NoSql数据库,其具备分布式数据库高性能、高吞吐量、多数据类型等优良特性,并且针对一些大数据量的聚合和统计分析场景,它也支...

cs4995的博客 1767

Mongodb Mapreduce - 转载

Mongodb Mapreduce 初窥        声明:本文是学习Mongodb过程中的副产品,因为接触时间并不长,难免有理解上的偏差,希望借此文与感兴趣的朋友讨论切磋,呵呵。        去年年底,开始接触并学习Mapreduce模型。因为工作上的关系,最近开始研究Mongodb,其中对其新特性(2010年四月)reduce模型实现产生的兴趣,因为特别留意了一

Terry - 专注外贸B2C 549

MongoDB 底层原理

MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持无模式的数据建模,可以存储比较复杂的数据类型,是一款非常流行的文档类型数据库。插件式的存储引擎架构可以实现 Server 层和存储引擎层的解耦,可以支持多种存储引擎,如 MySQL 既可以支持 B-Tree 结构的 InnoDB 存储引擎,还可以支持 LSM 结构的 RocksDB 存储引擎。与 MySQL 一样,MongoDB 采用的也是插件式的存储引擎架构 ,支持不同类型的存储引擎,不同的存储引擎解决不同场景的问题。

sekever的博客 467

关于mongodb的mapReduce

由于nodejs本身的限制,在程序中使用js进行大批量计算效率不高。而V8引擎自身对内存大小的限制(64位系统下1.4G),同样限制了数据规模。 因此,相对于从mongodb中抽出数据进行计算,在mongodb中利用聚合函数或者其他方法完成计算,避开nodejs自身限制的方案在可靠性和扩展性上都相对较为令人满意。 mongodb支持类似SQL中的聚合函数,虽然语法不通,不过基本原理类似。...

weixin_30951231的博客 164

MapReduce初探之一~~基于Mongodb实现标签统计

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33958366的博客 222
上一篇: Mongodb中Aggregation特性
下一篇: Mysql Replication基本原理(一)
shift_alt_ctrl
博客等级 码龄10年 0粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值