sql >> Databáze >  >> NoSQL >> MongoDB

Zrychlete agregaci MongoDB

V současné době existují určitá omezení v tom, jak může agregační rámec zlepšit výkon vašeho dotazu, ale můžete mu pomoci následujícím způsobem:

db.my_collection.aggregate([
    { "$sort" : { "LOG_TYPE" : 1 } },
    { "$group" :{ 
        "_id": "$LOG_TYPE",
        "COUNT": { "$sum":1 }
    }}
])

Přidáním řazení na LOG_TYPE „donutíte“ optimalizátor použít index pro LOG_TYPE, aby dal dokumenty do pořádku. To zlepší výkon několika způsoby, ale odlišně v závislosti na používané verzi.

Na reálných datech, pokud máte data přicházející do $skupinové fáze seřazená, zlepší to efektivitu akumulace součtů. Můžete vidět různé plány dotazů, kde s $sort použije index shard key. Zlepšení skutečného výkonu, které to přináší, bude záviset na počtu hodnot v každém "segmentu" - obecně LOG_TYPE, který má pouze sedm různých hodnot, z něj dělá extrémně špatný zlomkový klíč, ale znamená to, že je pravděpodobné, že následující kód bude mnohem rychlejší než dokonce optimalizovaná agregace:

db.my_collection.distinct("LOG_TYPE").forEach(function(lt) {
   print(db.my_collection.count({"LOG_TYPE":lt});
});


  1. jak vytvořit mongoDB objectid v Javě

  2. PHP startovací mongo:Nelze inicializovat modul

  3. Chyba [ERR_HTTP_HEADERS_SENT]:Nelze nastavit hlavičky po jejich odeslání klientovi

  4. Jak mohu zkontrolovat, že příkaz mongo update byl úspěšný v uzlu