MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB Count() a agregacja

.count() jest zdecydowanie szybszy. Możesz zobaczyć implementację, dzwoniąc

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

co zwraca długość kursora. domyślnego zapytania (jeśli count() jest wywoływana bez dokumentu zapytania), co z kolei jest zaimplementowane jako zwracanie długości _id_ indeks, iirc.

Agregacja jednak odczytuje każdy dokument i przetwarza go. To może być tylko w połowie tego samego rzędu wielkości z .count() robiąc to tylko na około 100k dokumentów (podaj i weź zgodnie z twoją pamięcią RAM).

Poniższa funkcja została zastosowana do kolekcji zawierającej 12 milionów wpisów:

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
}

I wrócił:

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

Jednostką są milisekundy.

hth




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Długi akumulator zamiast Double w funkcji group() MongoDB

  2. Jak ustawić odzyskiwanie wywołania zwrotnego w manguście, w zmiennej globalnej?

  3. Node.js nasłuchuje zmian MongoDB

  4. 4 sposoby na aktualizację dokumentu w MongoDB

  5. Czynniki do rozważenia przy wyborze MongoDB dla aplikacji Big Data