MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB Count() срещу агрегиране

.count() е много по-бързо. Можете да видите изпълнението, като се обадите на

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

който връща дължината на курсора. на заявката по подразбиране (ако count() се извиква без документ за заявка), което от своя страна се реализира като връщане на дължината на _id_ индекс, iirc.

Агрегирането обаче чете всеки един документ и го обработва. Това може да бъде само наполовина в същия порядък с .count() когато го правите само върху около 100 000 документа (вземете и вземете според вашата RAM памет).

Функцията по-долу беше приложена към колекция с около 12 милиона записа:

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
}

И върна:

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

Единицата е милисекунди.

hth




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb upsert вграден документ

  2. Влезте с root идентификационни данни в Mongodb контейнер, създаден с помощта на Docker compose

  3. MongoDB Native Node Driver:Explain е повреден?

  4. TypeError:db.collection не е функция, НЕ МОЖЕ ДА ВЗЕМЕ

  5. Върнете последната истинска стойност за всяка група