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

MongoDB jako baza danych szeregów czasowych

Oczywiście jest to stare pytanie, ale natknąłem się na nie, gdy szukałem danych MongoDB pod kątem danych z serii czasowych. Pomyślałem, że warto podzielić się następującym podejściem do wcześniejszego przydzielania kompletnych dokumentów i wykonywania operacji aktualizacji, w przeciwieństwie do nowych operacji wstawiania. Zauważ, że to podejście zostało udokumentowane tutaj i tutaj.

Wyobraź sobie, że przechowujesz dane co minutę. Rozważ następującą strukturę dokumentu:

{
  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
}

Jest to porównywalne ze standardowym podejściem relacyjnym. W takim przypadku tworzony jest jeden dokument na zarejestrowaną wartość, co powoduje wiele operacji wstawiania. Możemy zrobić lepiej. Rozważ następujące kwestie:

{
  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
  }
}

Teraz możemy napisać jeden dokument i wykonać 59 aktualizacji. Jest to znacznie lepsze, ponieważ aktualizacje są niepodzielne, pojedyncze zapisy są mniejsze i istnieją inne korzyści związane z wydajnością i współbieżnością. Ale co by było, gdybyśmy chcieli przechowywać cały dzień, a nie tylko godziny w jednym dokumencie. Wymagałoby to od nas przejścia przez 1440 wpisów, aby uzyskać ostatnią wartość. Aby to poprawić, możemy rozszerzyć do następujących czynności:

{
  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}
  }
}

Korzystając z tego zagnieżdżonego podejścia, musimy teraz przejść maksymalnie 24 + 60, aby uzyskać ostatnią wartość w ciągu dnia.

Jeśli zbudujemy dokumenty ze wszystkimi wartościami uzupełnionymi z dopiskiem, możemy być pewni, że dokument nie zmieni rozmiaru, a tym samym nie zostanie przesunięty.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dane wiosenne i mongodb - proste wycofanie ze sprężyną w ramach @Transactional

  2. Współpraca Sparka, Pythona i MongoDB

  3. MongoDB $toBool

  4. Jak ograniczyć liczbę aktualizacji dokumentów w mongodb

  5. Jak wyświetlić obraz base64 w reakcji?