有玩 mongo 的 mapreduce 的吗, 请教个问题。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
no13bus

有玩 mongo 的 mapreduce 的吗, 请教个问题。

  •  
  •   no13bus
    no13bus 2015 年 3 月 21 日 4039 次点击
    这是一个创建于 4052 天前的主题,其中的信息可能已经有所发展或是发生改变。
    http://stackoverflow.com/questions/12015064/mongodb-mapreduce-and-sorting?answertab=votes#tab-top 这里面提到mp适合作为放到后台业务数据处理 不适合做查询,这怎么理解?定时跑mp,将结果放到新的表里面吗?然后查询的时候直接查新表的数据?
    14 条回复    2015-03-24 22:42:48 +08:00
    nesuk
        1
    nesuk  
       2015 年 3 月 21 日 via iPhone
    阿里的ODPS就是这样建议的
    micyng
        2
    micyng  
       2015 年 3 月 21 日   1
    用数据库做mr就是zuo si的节奏,更何况是mongo
    gt11799
        3
    gt11799  
       2015 年 3 月 21 日
    如果mongo足够大,写入之后立刻查询,得到的基本是写入前的结果。
    mongo适合记录一些初始数据,然后跑脚本在后台处理成你想要的数据。
    mongo的数据要展示到前台,最好是提前处理好的。
    与用户实时交互的数据,一般不能使用mongo。
    sujin190
        4
    sujin190  
       2015 年 3 月 21 日
    @gt11799 这个mongo默认写入是非安全模式的,有可能会出现这种情况,你打开安全不可以解决这个问题么?
    taogogo
        5
    taogogo  
       2015 年 3 月 21 日
    最好不要,mongo的速度受内存影响大;分区后mr没有优势;通常mr是单线程的(除非自己构造数据);repair的时候会锁住等等一系列毛病…要是在线使用,很容易服务中断
    SevenJ
        6
    SevenJ  
       2015 年 3 月 21 日   1
    我以前是定时跑mr,然后把结果放到表里
    libook
        7
    libook  
       2015 年 3 月 21 日   1
    如果是聚合需求的话,基本上count、distinct、aggregate就完成绝大多的处理功能,而且mongodb本身也对这些方法进行了很好的优化,效率很高,能用这些就不要用mapReduce,虽然mapReduce能实现上述几种聚合方法的功能,但是因为没有进行优化,所以非常慢。通常的建议是,如果你有即时的聚合查询需求,不要用mapReduce。
    gt11799
        8
    gt11799  
       2015 年 3 月 22 日
    @sujin190 mongodb的写入不阻塞是异步架构中蛮重要的一环,安全模式没试过,感觉是阻塞的。
    使用mongodb记录原始数据,重要的数据存入mysql,跟用户直接交互使用一些缓存。物尽其用才是王道,而不是期望一种东西能够满足所有。
    notxx
        9
    notxx  
       2015 年 3 月 22 日
    mapReduce是mongodb早期设计了,采用内置的js引擎来实现统计汇总,因此还有js引擎独占锁的问题。从输出方式也能看出来是不建议直接前台用的:要么inline方式输出一个结果集(有大小限制),要么用结果插入一张表,插入表的方式是比较建议的。
    aggregation是新的设计,通过流水线实现统计汇总,写起来更难理解,但是性能上面好多了。从输出方式来看,支持游标方式输出,能直接在线输出很大的结果集。
    ps,mapReduce的两个函数如果写不好(例如死循环了)是可以把整个服务器拖死的;从2.6的权限模型看,mongodb已经开始尽量限制服务器端脚本的应用,所以还是用aggregation更好。
    notxx
        10
    notxx  
       2015 年 3 月 22 日   1
    @sujin190 如果是在复制集(replication set)中,总不能要求等所有节点都写入了才返回吧,那样随便挂掉一个节点,前台服务就卡死了。如果只要求一两个节点,和非安全写入在上面那个问题的感受上没啥区别。
    而且ReadReference一般建议是找最近或者最快的非写入节点,以降低写入节点的压力,这个情况下写入之后要有一个间隔才会读到。
    sujin190
        11
    sujin190  
       2015 年 3 月 22 日
    @notxx 这个是mongo的问题么?mysql主从也有这个问题啊,当遇到这个问题时,说明你上层没设计好
    notxx
        12
    notxx  
       2015 年 3 月 23 日
    @sujin190 可能不是所有人都熟悉这个状况啊,而且我主要的点还是WriteConcern其实不是为了这个用的。
    no13bus
        13
    no13bus  
    OP
       2015 年 3 月 23 日
    @notxx 因为看到好多做监控的提到了mongo,是说也是用mongo来进行存储一些组件的运行情况。他只是适合用来存实时性不那么强的数据?觉得监控应该实行性还行的吧。
    当然我操作mongo的时候用的是异步客户端Motor。
    notxx
        14
    notxx  
       2015 年 3 月 24 日
    @no13bus 其实我觉得@sujin190 说的没错,更重要的是设计本身。以我的经验来看,如果你能设计出来适合mongodb的数据结构,那么从各个角度(性能、使用弹性和服务弹性)都是很好的。但是反过来来说,如果出现了反设计(或者仅仅是不适合mongodb的设计)就很麻烦了。
    或者简单来说,优化mongodb部署的时候你可以要求实时写入,也可以要求实时读取,但是读写都实时,而且要求不会脏读,恐怕不是能够实现的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     988 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 68ms UTC 22:50 PVG 06:50 LAX 15:50 JFK 18:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86