Latest web development tutorials

MongoDB Peta Mengurangi

Peta-Mengurangi adalah model komputasi, hanya berarti bahwa sebagian besar pekerjaan (data) dekomposisi (MAP) untuk melakukan, dan kemudian menggabungkan hasil ke hasil akhir (MENGURANGI).

MongoDB menyediakan Peta-Mengurangi sangat fleksibel untuk analisis data skala besar juga cukup praktis.


perintah MapReduce

Berikut ini adalah sintaks dasar MapReduce:

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

Menggunakan fungsi MapReduce untuk mencapai dua fungsi Peta dan Mengurangi fungsi, Peta panggilan fungsi memancarkan (key, value), melintasi koleksi di semua catatan, dan nilai kunci dilewatkan ke Mengurangi fungsi untuk pengolahan.

fungsi peta harus memanggil memancarkan (key, value) Pengembalian pasangan.

Parameter Deskripsi:

  • fungsi pemetaan (menghasilkan urutan kunci sebagai mengurangi parameterfungsi): peta.
  • mengurangi fungsi statistik, tugas ini adalah untuk mengurangi fungsi tombol-nilai ke dalam kunci-nilai, yaitu, nilai array ke dalam nilai nilai tunggal..
  • out hasil statistik set disimpan (tidak menentukan penggunaan koleksi sementara secara otomatis dihapus setelah klien terputus).
  • kondisi saringanquery, hanya untuk memenuhi persyaratan dokumen akan dipanggil fungsi peta.(Query.limit, semacam dapat mencampur)
  • mengurutkan dan batas mengikat semacam semacam parameter (juga mantan dokumen yang dikirim ke fungsi peta untuk menyortir), Anda dapat mengoptimalkan mekanisme pengelompokan
  • membatasi jumlah dokumen yang dikirim ke batas atas fungsi peta (jika tidak ada batasan, semacam saja sedikit digunakan)

Gunakan MapReduce

Mempertimbangkan struktur dokumen berikut untuk menyimpan artikel pengguna, dokumen, dan menyimpan pengguna user_name bidang status artikel:

>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "mark",
   "status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "mark",
   "status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "mark",
   "status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "mark",
   "status":"active"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "mark",
   "status":"disabled"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "w3big",
   "status":"disabled"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "w3big",
   "status":"disabled"
})
WriteResult({ "nInserted" : 1 })
>db.posts.insert({
   "post_text": "本教程,最全的技术文档。",
   "user_name": "w3big",
   "status":"active"
})
WriteResult({ "nInserted" : 1 })

Sekarang kita akan menggunakan tulisan mengatur fungsi MapReduce untuk memilih artikel yang diterbitkan (status: "aktif"), dan dengan paket user_name dihitung untuk setiap pengguna Posts:

>db.posts.mapReduce( 
   function() { emit(this.user_name,1); }, 
   function(key, values) {return Array.sum(values)}, 
      {  
         query:{status:"active"},  
         out:"post_total" 
      }
)

Di atas MapReduce output:

{
        "result" : "post_total",
        "timeMillis" : 23,
        "counts" : {
                "input" : 5,
                "emit" : 5,
                "reduce" : 1,
                "output" : 2
        },
        "ok" : 1
}

Hasil penelitian menunjukkan bahwa total empat sesuai dengan kriteria permintaan (status: "aktif") dokumen yang dihasilkan empat kunci dalam fungsi peta dalam dokumen, dan kemudian menggunakan fungsi yang sama untuk mengurangi kunci dibagi menjadi dua kelompok.

parameter tertentu:

  • Hasil: menyimpan hasil nama koleksi ini, ini adalah satu set sementara kembali dari koneksi otomatis MapReduce telah dihapus.
  • timeMillis: eksekusi membutuhkan waktu, dalam milidetik
  • masukan: jumlah kondisi dokumen tersebut dikirim ke fungsi peta
  • memancarkan: kali dalam fungsi peta memancarkan disebut, yaitu, jumlah total dari semua pengumpulan data
  • ouput: Hasil Jumlah dokumen dalam koleksi (count sangat membantu untuk debugging)
  • ok: keberhasilan, kesuksesan 1
  • err: Jika gagal, mungkin ada alasan untuk gagal, tapi dari pengalaman, alasannya tidak jelas, tidak sangat berguna

Menggunakan operator find untuk melihat hasil query MapReduce dari:

>db.posts.mapReduce( 
   function() { emit(this.user_name,1); }, 
   function(key, values) {return Array.sum(values)}, 
      {  
         query:{status:"active"},  
         out:"post_total" 
      }
).find()

Hasil query di atas ditunjukkan di bawah ini, ada dua pengguna tom dan menandai dua artikel yang dipublikasikan:

{ "_id" : "mark", "value" : 4 }
{ "_id" : "w3big", "value" : 1 }

Dengan cara yang sama, MapReduce dapat digunakan untuk membangun besar, permintaan agregat kompleks.

Peta fungsi dan Mengurangi fungsi dapat diimplementasikan dengan menggunakan JavaScript, MapReduce memanfaatkan sangat fleksibel dan kuat.