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

MongoDB als Zeitreihendatenbank

Offensichtlich ist dies eine alte Frage, aber ich bin darauf gestoßen, als ich MongoDB nach Zeitreihendaten recherchiert habe. Ich dachte, dass es sich lohnen könnte, den folgenden Ansatz zum Zuordnen vollständiger Dokumente im Voraus und zum Ausführen von Aktualisierungsvorgängen im Gegensatz zu neuen Einfügevorgängen zu teilen. Beachten Sie, dass dieser Ansatz hier und hier dokumentiert wurde.

Stellen Sie sich vor, Sie speichern jede Minute Daten. Betrachten Sie die folgende Dokumentstruktur:

{
  timestamp: ISODate("2013-10-10T23:06:37.000Z"),
  type: ”spot_EURUSD”,
  value: 1.2345
},
{
  timestamp: ISODate("2013-10-10T23:06:38.000Z"),
  type: ”spot_EURUSD”,
  value: 1.2346
}

Dies ist vergleichbar mit einem relationalen Standardansatz. In diesem Fall erzeugen Sie ein Dokument pro erfasstem Wert, was viele Einfügevorgänge verursacht. Wir können es besser. Beachten Sie Folgendes:

{
  timestamp_minute: ISODate("2013-10-10T23:06:00.000Z"),
  type: “spot_EURUSD”,
  values: {
    0: 1.2345,
    …  
    37: 1.2346,
    38: 1.2347,
    … 
    59: 1.2343
  }
}

Jetzt können wir ein Dokument schreiben und 59 Aktualisierungen durchführen. Dies ist viel besser, da Aktualisierungen atomar sind, einzelne Schreibvorgänge kleiner sind und es andere Leistungs- und Parallelitätsvorteile gibt. Aber was wäre, wenn wir den ganzen Tag und nicht nur die ganzen Stunden in einem Dokument speichern wollten? Dies würde dann erfordern, dass wir 1440 Einträge durchlaufen, um den letzten Wert zu erhalten. Um dies zu verbessern, können wir Folgendes erweitern:

{
  timestamp_hour: ISODate("2013-10-10T23:00:00.000Z"),
  type: “spot_EURUSD”,
  values: {
    0: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
    1: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
    …,
    22: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
    23: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343}
  }
}

Mit diesem verschachtelten Ansatz müssen wir jetzt nur noch maximal 24 + 60 laufen, um den allerletzten Wert des Tages zu erhalten.

Wenn wir die Dokumente mit allen vorab gefüllten Werten erstellen, können wir sicher sein, dass das Dokument seine Größe nicht ändert und daher nicht verschoben wird.