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

Hitungan MongoDB () vs. Agregasi

.count() adalah jauh lebih cepat. Anda dapat melihat implementasinya dengan memanggil

// Note the missing parentheses at the end
db.collection.count

yang mengembalikan panjang kursor. dari kueri default (jika count() dipanggil tanpa dokumen kueri), yang pada gilirannya diimplementasikan sebagai mengembalikan panjang _id_ indeks, iirc.

Namun, agregasi membaca setiap dokumen dan memprosesnya. Ini hanya bisa setengah jalan dalam urutan besarnya yang sama dengan .count() ketika melakukannya hanya untuk beberapa 100k dokumen (memberi dan menerima sesuai dengan RAM Anda).

Fungsi di bawah ini diterapkan ke koleksi dengan beberapa entri 12 juta:

function checkSpeed(col,iterations){

  // Get the collection
  var collectionUnderTest = db[col];

  // The collection we are writing our stats to
  var stats = db[col+'STATS']

  // remove old stats
  stats.remove({})

  // Prevent allocation in loop
  var start = new Date().getTime()
  var duration = new Date().getTime()

  print("Counting with count()")
  for (var i = 1; i <= iterations; i++){
    start = new Date().getTime();
    var result = collectionUnderTest.count()
    duration = new Date().getTime() - start
    stats.insert({"type":"count","pass":i,"duration":duration,"count":result})
  }

  print("Counting with aggregation")
  for(var j = 1; j <= iterations; j++){
    start = new Date().getTime()
    var doc = collectionUnderTest.aggregate([{ $group:{_id: null, count:{ $sum: 1 } } }])
    duration = new Date().getTime() - start
    stats.insert({"type":"aggregation", "pass":j, "duration": duration,"count":doc.count})
  }

  var averages = stats.aggregate([
   {$group:{_id:"$type","average":{"$avg":"$duration"}}} 
  ])

  return averages
}

Dan kembali:

{ "_id" : "aggregation", "average" : 43828.8 }
{ "_id" : "count", "average" : 0.6 }

Satuannya adalah milidetik.

hth




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tidak dapat membuat indeks karena TypeError:argumen tidak cukup untuk format string

  2. Penyortiran tidak peka huruf besar-kecil di MongoDB

  3. Membandingkan dua bidang koleksi mongo menggunakan driver c# di mono

  4. mongodb - ambil subset array

  5. Mainkan Framework 2.5 bagaimana cara menambahkan mongoDB?