MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Bereichsunterstützung im Laufe der Zeit Bucket Analytics

Kommen wir nacheinander zu Ihrer Frage:

Leistungsmetriken von nur einer einzigen Ausführung zu betrachten, ist wirklich nicht so, wie es funktioniert. Sie sollten den Durchschnitt über mehrere Ausführungen nehmen, bevor Sie schlussfolgern, da mehrere Faktoren eine Rolle spielen. Allerdings speichert MongoDB die am häufigsten verwendeten Dokumente im Speicher und behält sie dort, es sei denn, es muss Speicher für ein anderes Dokument freigeben. Wenn also eine Abfrage auf Dokumente zugreift, die bereits von einer vorherigen Abfrage zwischengespeichert wurden, sollte dies schneller sein.

Auch in der MongoDB-Aggregation werden Indizes nur am Anfang verwendet, falls vorhanden. Zum Beispiel $match und $sort Phasen können Indizes verwenden. In Ihrem Fall $match ist die erste Pipeline-Phase, das ist also ein Gewinn.

In MongoDB werden Daten in BSON gespeichert , also Datumsangaben sind im Grunde Zahlen wenn sie verglichen werden. Es gibt also keinen Unterschied.

Obwohl ich es nicht getestet habe, bezweifle ich wirklich, dass der time_bucket-Ansatz eine schnellere Antwort liefert. Seit created_at immer erhöht wird, wird der Index in diesem Fall auch ohne den time_bucket angehängt. Darüber hinaus ist die Indexgröße bei der Erstellung auf einem Array vergleichsweise groß als bei einem einfachen Datumsfeld. Wird das nicht das Problem verursachen, den Index in den Arbeitsspeicher einzupassen.

Die Verwendung eines time_bucket ist sinnvoll, wenn Sie vor dem Abgleich eine Funktion für das Datumsfeld verwenden. Wenn Sie vor dem Abgleich nur das Jahr aus dem Datumsfeld extrahieren, wird der vorhandene Index für das Datum unbrauchbar.

Es ist immer besser, Ihre Parameter so umzuwandeln, dass sie mit dem Datentyp in der Datenbank übereinstimmen, anstatt umgekehrt.

Ja es ist möglich. Wenn es $and ist , geben Sie einfach alle Ihre Filter durch Kommas getrennt im $match an Phase. Wenn es $or ist Verwenden Sie den $or Operator.

Wenn Sie zwei $macth Phasen nacheinander MongoDB kombiniert sie zu einer . Sie brauchen sich also keine Gedanken über das Hinzufügen von Ergebnissen mehrerer Spielphasen zu machen.

Jetzt Ihre Optimierung Punkte

Ja, abgedeckte Abfragen sind viel schneller.

Wenn die Größe von Dokumenten in der $group reduziert wird Stufe durch Verwendung von $project , dann ist es wahr.

Es ist nicht unbedingt wahr, aber es ist im Allgemeinen der Fall. Sie können diese Antwort überprüfen .