Muszę utworzyć bazę danych szeregów czasowych i wykonać następujące zadania:
- utwórz nowe szeregi czasowe
- zaktualizuj istniejące szeregi czasowe
- sprawdzaj jeden lub kilka szeregów czasowych jednocześnie (na przykład wszystkie szeregi czasowe dla tej samej daty itp.)
Czy Mongo jest do tego przystosowane, a jeśli tak, to jak mam uporządkować bazę danych? (jednorazowa seria = jeden dokument? Lub jeden dokument = jeden wpis serii czasowej, a wszystkie te dokumenty tworzą kolekcję, która jest całym szeregiem czasowym?)
Trochę się tu zagubiłem i trudno mi znaleźć jakąkolwiek informację, ponieważ zazwyczaj Mongo jest prezentowane jako bardzo elastyczne, więc użytkownik ma wybór w infrastrukturze.
Wszelkie linki do samouczków, które konkretnie wyjaśniają, jak zarządzać szeregami czasowymi w Mongo, są bardzo mile widziane.
Dziękuję Ci!
Odpowiedzi:
Proponuję jednorazowe wprowadzenie szeregu czasowego na dokument. Istnieją pewne problemy z przechowywaniem wielu wpisów w dokumencie:
Należy również pamiętać, że znacznik czasu jest wbudowany w domyślny obiekt MongoDB ObjectId . Możesz tego użyć, jeśli precyzja szeregu czasowego jest mniejsza niż jedna sekunda.
Oto przykładowy dokument BSON z biblioteki rejestrowania zdarzeń korzystającej z MongoDB :
Ponieważ dziennik zdarzeń jest podobny do szeregów czasowych, warto przestudiować resztę kodu . Istnieją wersje w Javie, C #, PHP i Python.
Oto inny podobny projekt typu open source: Zarkov
[aktualizacja] W odpowiedzi na komentarz @ RockScience dodałem kilka innych referencji:
źródło
Znalazłem to pytanie na SO ( /programming/4814167/storing-time-series-data-relational-or-non ), gdzie OP pyta, jak przechowywać szeregi czasowe. Chociaż jego pytanie jest bardziej oparte na korzystaniu z bazy danych NoSQL lub RDBMS, a ty wydajesz się dość nastawiony na używanie bazy danych NoSQL.
Znalazłem również ten artykuł na temat „ Unikalnych wymagań bazy danych danych szeregów czasowych ”, który może być przydatny.
Mam nadzieję że to pomoże.
źródło
Tak, zdecydowanie, baza danych NoSQL lepiej nadaje się do przechowywania danych szeregów czasowych niż tradycyjne RDBMS.
Tak MongoDB jest wyjątkowo dostosowany do tego przypadku użycia.
-Jak należy ustrukturyzować bazę danych? Jeden dokument = wprowadzenie jednego szeregu czasowego VS wiele szeregów czasowych.
Odpowiedzią jest przechowywanie w jednym dokumencie wielu szeregów czasowych. Mniejsza liczba dokumentów poprawi wydajność przy mniejszej liczbie odczytów. Jednym ze sposobów jest przygotowanie dokumentu ze wstępnie zdefiniowanymi wartościami. Pozwoli to zoptymalizować aktualizację dokumentu, unikając wypełniania rekordów .
Oto przykład schematu, w jaki sposób optymalnie przechowywać godzinowe serie czasowe w odstępach minutowych:
Inicjujesz go wartościami 0, a następnie aktualizacje zostaną zoptymalizowane. Odczyty są zoptymalizowane, ponieważ jeden dokument jest odczytywany zamiast 60. Jeśli chcesz przechowywać dane o wartości dziennej lub miesiąc, gdy będziesz postępować z tą samą techniką, masz pomysł.
Oto link do samouczka, który konkretnie wyjaśnia, jak zarządzać szeregami czasowymi w MongoDb z oficjalnego bloga MongoDb: http://blog.mongodb.org/post/65517193370/schema-design-for-time-series-data-in- mongodb
źródło