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

Podpora rozsahu v průběhu času

Pojďme k vaší otázce jeden po druhém:

Dívat se na metriky výkonu pouze z jednoho provedení opravdu nefunguje. Než uzavřete závěr, měli byste vzít průměr za několik provedení, protože ve hře je několik faktorů. Jak již bylo řečeno, MongoDB ukládá nejčastěji používané dokumenty do paměti a uchovává je tam, pokud nemusí uvolnit paměť pro nějaký jiný dokument. Pokud tedy dotaz přistupuje k dokumentům již uloženým v mezipaměti z předchozího dotazu, měl by být rychlejší.

Také v MongoDB agregace používá indexy pouze na začátku, pokud existují. Například $match a $sort fáze mohou používat indexy. Ve vašem případě $match je první fáze potrubí, takže to je výhra.

V MongoDB jsou data uložena v BSON , takže data jsou v podstatě čísla když se porovnávají. Takže v tom není žádný rozdíl.

Ačkoli jsem to netestoval, opravdu pochybuji, že přístup time_bucket poskytne rychlejší odezvu. Od created_at se vždy zvýší, index bude v tomto případě také připojen na konec bez time_bucket. Kromě toho bude velikost indexu při vytváření na poli poměrně velká než na jednoduchém datovém poli. Nezpůsobí to problém s umístěním indexu do paměti RAM.

Použití time_bucket má smysl, když před párováním používáte nějakou funkci v datovém poli. Pokud z pole data před párováním extrahujete pouze rok, bude stávající index k datu nepoužitelný.

Vždy je lepší přetypovat parametry tak, aby odpovídaly datovému typu v databázi, než naopak.

Ano, je to možné. Pokud je to $and , stačí zadat všechny své filtry oddělené čárkami v $match fáze. Pokud je to $or použijte $or operátor.

Pokud máte dva $macth fáze jedna po druhé MongoDB je kombinuje do jedné . Nemusíte si tedy dělat starosti s přidáváním výsledků více fází zápasu.

Nyní vaše Optimalizace Body

Ano, pokryté dotazy jsou mnohem rychlejší.

Pokud je velikost dokumentů zmenšena ve $group fázi pomocí $project , pak ano, je to pravda.

Nemusí to být nutně pravda, ale obecně to tak je. Můžete zkontrolovat tuto odpověď .




  1. Chyba při instalaci ovladače MongoDb PHP s XAMPP na Max OS Lion

  2. Nelze najít modul 'socket.io/node_modules/redis'

  3. Soubory žurnálu jsou přítomny v adresáři žurnálu, ale spouštějí se bez povolení žurnálování

  4. Spuštění redis na obrazu nodejs Docker