MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB, MapReduce dan sortir

Pertama-tama, Mongo map/reduce tidak dirancang untuk digunakan sebagai alat kueri (seperti di CouchDB), ini dirancang untuk Anda menjalankan tugas latar belakang. Saya menggunakannya di tempat kerja untuk menganalisis data lalu lintas.

Apa yang Anda lakukan salah adalah Anda menerapkan sort() ke input Anda, tetapi itu tidak berguna karena ketika map() tahap selesai, dokumen perantara diurutkan berdasarkan masing-masing keys . Karena kunci Anda adalah sebuah dokumen, itu sedang diurutkan berdasarkan product_id , popularity .

Beginilah cara saya membuat kumpulan data saya

function generate_dummy_data() {
    for (i=2; i < 1000000; i++) { 
        db.foobar.save({
          _id: i, 
         category_id: parseInt(Math.random() * 30), 
         popularity:    parseInt(Math.random() * 50)
        }) 
    }
}

Dan ini tugas peta/pengurangan saya:

var data = db.runCommand({
  'mapreduce': 'foobar',
  'map': function() {
    emit({
      sorting: this.popularity * -1,
      product_id: this._id,
      popularity: this.popularity,
    }, 1);
  },
  'reduce': function(key, values) {
    var sum = 0;
    values.forEach(function(v) {
      sum += v;
    });

    return sum;  
  },
  'query': {category_id: 20},
  'out': {inline: 1},
});

Dan inilah hasil akhirnya (panjang banget paste-nya disini):

http://cesarodas.com/results.txt

Ini berfungsi karena sekarang kami mengurutkan berdasarkan sorting, product_id, popularity . Anda dapat bermain dengan penyortiran sesuka Anda, ingatlah bahwa pengurutan terakhir adalah dengan key terlepas dari Anda bagaimana input Anda diurutkan.

Bagaimanapun seperti yang saya katakan sebelumnya, Anda harus menghindari melakukan kueri dengan Peta/Kurangi itu dirancang untuk pemrosesan latar belakang. Jika saya jadi Anda, saya akan mendesain data saya sedemikian rupa sehingga saya dapat mengaksesnya dengan kueri sederhana, selalu ada pertukaran dalam hal ini penyisipan/pembaruan kompleks untuk memiliki kueri sederhana (begitulah cara saya melihat MongoDB).



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $push

  2. menangani @ dalam string koneksi mongodb

  3. Mongo Query dengan Regex di Node JS yang beroperasi PADA VARIABEL

  4. Migrasi MongoDB ke DynamoDB, Bagian 2

  5. Bagaimana cara menghapus dokumen menggunakan Node.js Mongoose?