国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫 - MongoDB - MongoDB中的MapReduce簡介

MongoDB中的MapReduce簡介

2020-05-01 18:34MongoDB教程網(wǎng) MongoDB

這篇文章主要介紹了MongoDB中的MapReduce簡介,MapReduce是一種計算模型,簡單的說就是將大批量的工作(數(shù)據(jù))分解(MAP)執(zhí)行,然后再將結(jié)果合并成最終結(jié)果(REDUCE),需要的朋友可以參考下

MongoDB MapReduce

MapReduce是一種計算模型,簡單的說就是將大批量的工作(數(shù)據(jù))分解(MAP)執(zhí)行,然后再將結(jié)果合并成最終結(jié)果(REDUCE)。這樣做的好處是可以在任務(wù)被分解后,可以通過大量機(jī)器進(jìn)行并行計算,減少整個操作的時間。

上面是MapReduce的理論部分,下面說實(shí)際的應(yīng)用,下面以MongoDB MapReduce為例說明。

下面是MongoDB官方的一個例子:

復(fù)制代碼 代碼如下:


> db.things.insert( { _id : 1, tags : ['dog', 'cat'] } );
> db.things.insert( { _id : 2, tags : ['cat'] } );
> db.things.insert( { _id : 3, tags : ['mouse', 'cat', 'dog'] } );
> db.things.insert( { _id : 4, tags : []  } );

 

> // map function
> map = function(){
...    this.tags.forEach(
...        function(z){
...            emit( z , { count : 1 } );
...        }
...    );
...};

> // reduce function
> reduce = function( key , values ){
...    var total = 0;
...    for ( var i=0; i<values.length; i++ )
...        total += values[i].count;
...    return { count : total };
...};

db.things.mapReduce(map,reduce,{out:'tmp'})
{
    "result" : "tmp",
    "timeMillis" : 316,
    "counts" : {
        "input" : 4,
        "emit" : 6,
        "output" : 3
    },
    "ok" : 1,
}
> db.tmp.find()
{ "_id" : "cat", "value" : { "count" : 3 } }
{ "_id" : "dog", "value" : { "count" : 2 } }
{ "_id" : "mouse", "value" : { "count" : 1 } }

 

例子很簡單,計算一個標(biāo)簽系統(tǒng)中每個標(biāo)簽出現(xiàn)的次數(shù)。

這里面,除了emit函數(shù)之外,所有都是標(biāo)準(zhǔn)的js語法,這個emit函數(shù)是非常重要的,可以這樣理解,當(dāng)所有需要計算的文檔(因?yàn)樵趍apReduce時,可以對文檔進(jìn)行過濾,接下來會講到)執(zhí)行完了map函數(shù),map函數(shù)會返回key_values對,key即是emit中的第一個參數(shù)key,values是對應(yīng)同一key的emit的n個第二個參數(shù)組成的數(shù)組。這個key_values會作為參數(shù)傳遞給reduce,分別作為第1.2個參數(shù)。

reduce函數(shù)的任務(wù)就是將key-values變成key-value,也就是把values數(shù)組變成一個單一的值value。當(dāng)key-values中的values數(shù)組過大時,會被再切分成很多個小的key-values塊,然后分別執(zhí)行Reduce函數(shù),再將多個塊的結(jié)果組合成一個新的數(shù)組,作為Reduce函數(shù)的第二個參數(shù),繼續(xù)Reducer操作。可以預(yù)見,如果我們初始的values非常大,可能還會對第一次分塊計算后組成的集合再次Reduce。這就類似于多階的歸并排序了。具體會有多少重,就看數(shù)據(jù)量了。

reduce一定要能被反復(fù)調(diào)用,不論是映射環(huán)節(jié)還是前一個簡化環(huán)節(jié)。所以reduce返回的文檔必須能作為reduce的第二個參數(shù)的一個元素。

(當(dāng)書寫Map函數(shù)時,emit的第二個參數(shù)組成數(shù)組成了reduce函數(shù)的第二個參數(shù),而Reduce函數(shù)的返回值,跟emit函數(shù)的第二個參數(shù)形式要一致,多個reduce函數(shù)的返回值可能會組成數(shù)組作為新的第二個輸入?yún)?shù)再次執(zhí)行Reduce操作。)

MapReduce函數(shù)的參數(shù)列表如下:

復(fù)制代碼 代碼如下:

db.runCommand(
 { mapreduce : <collection>,
   map : <mapfunction>,
   reduce : <reducefunction>
   [, query : <query filter object>]
   [, sort : <sort the query.  useful for optimization>]
   [, limit : <number of objects to return from collection>]
   [, out : <output-collection name>]
   [, keeptemp: <true|false>]
   [, finalize : <finalizefunction>]
   [, scope : <object where fields go into javascript global scope >]
   [, verbose : true]
 }
);


或者這么寫:

復(fù)制代碼 代碼如下:

db.collection.mapReduce(
                         <map>,
                         <reduce>,
                         {
                           <out>,
                           <query>,
                           <sort>,
                           <limit>,
                           <keytemp>,
                           <finalize>,
                           <scope>,
                           <jsMode>,
                           <verbose>
                         }
                       )

 

1.mapreduce:指定要進(jìn)行mapreduce處理的collection
2.map:map函數(shù)
3.reduce:reduce函數(shù)
4.out:輸出結(jié)果的collection的名字,不指定會默認(rèn)創(chuàng)建一個隨機(jī)名字的collection(如果使用了out選項(xiàng),就不必指定keeptemp:true了,因?yàn)橐呀?jīng)隱含在其中了)
5.query:一個篩選條件,只有滿足條件的文檔才會調(diào)用map函數(shù)。(query。limit,sort可以隨意組合)
6.sort:和limit結(jié)合的sort排序參數(shù)(也是在發(fā)往map函數(shù)前給文檔排序),可以優(yōu)化分組機(jī)制
7.limit:發(fā)往map函數(shù)的文檔數(shù)量的上限(要是沒有l(wèi)imit,單獨(dú)使用sort的用處不大)
8.keytemp:true或false,表明結(jié)果輸出到的collection是否是臨時的,如果想在連接關(guān)閉后仍然保留這個集合,就要指定keeptemp為true,如果你用的是MongoDB的mongo客戶端連接,那必須exit后才會刪除。如果是腳本執(zhí)行,腳本退出或調(diào)用close會自動刪除結(jié)果collection
9.finalize:是函數(shù),它會在執(zhí)行完map、reduce后再對key和value進(jìn)行一次計算并返回一個最終結(jié)果,這是處理過程的最后一步,所以finalize就是一個計算平均數(shù),剪裁數(shù)組,清除多余信息的恰當(dāng)時機(jī)
10.scope:javascript代碼中要用到的變量,在這里定義的變量在map,reduce,finalize函數(shù)中可見
11.verbose:用于調(diào)試的詳細(xì)輸出選項(xiàng),如果想看MpaReduce的運(yùn)行過程,可以設(shè)置其為true。也可以print把map,reduce,finalize過程中的信息輸出到服務(wù)器日志上。

執(zhí)行MapReduce函數(shù)返回的文檔結(jié)構(gòu)如下:

復(fù)制代碼 代碼如下:


  { result : <collection_name>,

 

    timeMillis : <job_time>,

    counts : {

               input : <number of objects scanned>,

               emit : <number of times emit was called>,

               output : <number of items in output collection>

     } ,

     ok : <1_if_ok>,

     [, err : <errmsg_if_error>]

}

 

1.result:儲存結(jié)果的collection的名字,這是個臨時集合,MapReduce的連接關(guān)閉后自動就被刪除了。
2.timeMillis:執(zhí)行花費(fèi)的時間,毫秒為單位
3.input:滿足條件被發(fā)送到map函數(shù)的文檔個數(shù)
4.emit:在map函數(shù)中emit被調(diào)用的次數(shù),也就是所有集合中的數(shù)據(jù)總量
5.ouput:結(jié)果集合中的文檔個數(shù)(count對調(diào)試非常有幫助)
6.ok:是否成功,成功為1
7.err:如果失敗,這里可以有失敗原因,不過從經(jīng)驗(yàn)上來看,原因比較模糊,作用不大

java代碼執(zhí)行MapReduce的方法:

復(fù)制代碼 代碼如下:

public void MapReduce() {
        Mongo mongo = new Mongo("localhost",27017);
        DB db = mongo.getDB("qimiguangdb");
        DBCollection coll = db.getCollection("collection1");
      
        String map = "function() { emit(this.name, {count:1});}";
                                                                                                             
  
        String reduce = "function(key, values) {"; 
        reduce=reduce+"var total = 0;"; 
        reduce=reduce+"for(var i=0;i<values.length;i++){total += values[i].count;}"; 
        reduce=reduce+"return {count:total};}"; 
         
        String result = "resultCollection"; 
         
        MapReduceOutput mapReduceOutput = coll.mapReduce(map, 
                reduce.toString(), result, null); 
        DBCollection resultColl = mapReduceOutput.getOutputCollection(); 
        DBCursor cursor= resultColl.find(); 
        while (cursor.hasNext()) { 
            System.out.println(cursor.next()); 
        } 
    } 

延伸 · 閱讀

精彩推薦
  • MongoDBmongodb基本命令實(shí)例小結(jié)

    mongodb基本命令實(shí)例小結(jié)

    這篇文章主要介紹了mongodb基本命令,結(jié)合實(shí)例形式總結(jié)分析了MongoDB數(shù)據(jù)庫切換、查看、刪除、查詢等基本命令用法與操作注意事項(xiàng),需要的朋友可以參考下...

    dawn-liu3652020-05-26
  • MongoDBMongoDB憑什么躋身數(shù)據(jù)庫排行前五

    MongoDB憑什么躋身數(shù)據(jù)庫排行前五

    MongoDB以比去年同期超出65.96分的成績繼續(xù)雄踞榜單前五,這個增幅在全榜僅次于PostgreSQL的77.99,而其相對于4月份的6.10分的增長也是僅次于微軟SQL Server排名...

    孫浩峰3892020-05-22
  • MongoDBMongoDB中javascript腳本編程簡介和入門實(shí)例

    MongoDB中javascript腳本編程簡介和入門實(shí)例

    作為一個數(shù)據(jù)庫,MongoDB有一個很大的優(yōu)勢——它使用js管理數(shù)據(jù)庫,所以也能夠使用js腳本進(jìn)行復(fù)雜的管理——這種方法非常靈活 ...

    MongoDB教程網(wǎng)6982020-04-24
  • MongoDBMongodb實(shí)現(xiàn)定時備份與恢復(fù)的方法教程

    Mongodb實(shí)現(xiàn)定時備份與恢復(fù)的方法教程

    這篇文章主要給大家介紹了Mongodb實(shí)現(xiàn)定時備份與恢復(fù)的方法教程,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面...

    chenjsh364522020-05-13
  • MongoDBMongoDB安裝圖文教程

    MongoDB安裝圖文教程

    這篇文章主要為大家詳細(xì)介紹了MongoDB安裝圖文教程,分為兩大部分為大家介紹下載MongoDB和安裝MongoDB的方法,感興趣的小伙伴們可以參考一下 ...

    Yangyi.He6132020-05-07
  • MongoDBMongoDB 內(nèi)存使用情況分析

    MongoDB 內(nèi)存使用情況分析

    都說 MongoDB 是個內(nèi)存大戶,但是怎么知道它到底用了多少內(nèi)存呢...

    MongoDB教程網(wǎng)10002020-09-29
  • MongoDB分布式文檔存儲數(shù)據(jù)庫之MongoDB分片集群的問題

    分布式文檔存儲數(shù)據(jù)庫之MongoDB分片集群的問題

    這篇文章主要介紹了分布式文檔存儲數(shù)據(jù)庫之MongoDB分片集群的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋...

    Linux-18743072020-12-20
  • MongoDB遷移sqlserver數(shù)據(jù)到MongoDb的方法

    遷移sqlserver數(shù)據(jù)到MongoDb的方法

    這篇文章主要介紹了遷移sqlserver數(shù)據(jù)到MongoDb的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    聽楓xl9682021-01-03
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 91精品久久久久久 | 精久久| 一区二区免费在线观看 | 国产精品国色综合久久 | 成人在线免费看 | 伦一区二区三区中文字幕v亚洲 | a免费网站 | 黄色一级大片在线免费看产 | 在线成人免费视频 | 日日久 | 欧美日本韩国一区二区 | 成人av一区二区三区 | 综合色导航 | 三级视频在线观看 | 亚洲精品福利 | 中文字幕在线观看日本 | 川上优av中文字幕一区二区 | 日韩视频免费在线观看 | 亚洲国产精品久久久久婷婷老年 | 亚洲伦乱视频 | 久久国产精品99久久久久久老狼 | 欧美国产一区二区三区 | 国产99久久 | 国产精品美乳一区二区免费 | 久久久久久久一区 | 国产99久久精品一区二区永久免费 | 精品久久久久久亚洲综合网 | 国精产品99永久一区一区 | 91精品观看 | 免费成人高清 | 日本99精品 | 午夜精品久久久久久久久 | 成人日韩 | 国产精品久久久久久久久久久久久久 | 欧美韩日| 动漫卡通精品一区二区三区介绍 | 亚洲精品久久久一区二区三区 | 精品一区二区三区免费 | 国产精品成人一区二区三区夜夜夜 | 亚洲国产精品99久久久久久久久 | 一级做a爰片久久毛片免费陪 |