2013-05-08 14 views
8

Szukam sposobu przechowywania danych z sygnaturą czasową.Najlepszy sposób na przechowywanie danych serii czasowej z dużym napisem i wysoką agregacją. (~ 1 miliard punktów)

Każda sygnatura czasowa może mieć od 1 do 10 pól danych.

Czy mogę przechowywać dane jako (time, key, value) przy użyciu prostego rozwiązania do obsługi danych lub SQL? jak by to porównać do rozwiązania noSQL takiego jak mongo, gdzie mogę przechowywać {time:.., key1:..., key2:...}?

Będzie przechowywać około 10 punktów danych z maksymalną prędkością około 10 pól na sekundę. Dane mogą być gromadzone nawet przez 10 lat, łatwo gromadząc dane o rekordach miliardów. Baza danych powinna być w stanie pomóc w tworzeniu wykresów danych z zapytaniami o zakres czasowy.

Powinien być w stanie obsłużyć dużą częstotliwość pisania, ~ 100 na sekundę (ok, to nie jest tak wysoka, ale wciąż ..), jednocześnie jest w stanie obsłużyć zapytania, które zwracają około miliona rekordów (może jeszcze więcej)

Samo dane są bardzo proste, są to tylko pomiary elektroniczne. Niektóre muszą być mierzone z wysoką częstotliwością (~ 100 milisekund), a inne co 1 minutę.

Czy ktoś, kto użył czegoś takiego jak ten komentarz na plusy i minusy metody, której użyli?

(Oczywiście jest to bardzo specyficzny scenariusz, więc zdecydowanie nie ma na celu włączenia tego, co jest najlepszym pytaniem o bazę danych).

dane próbki:

{ _id: Date(2013-05-08 18:48:40.078554), 
    V_in: 2.44, 
    I_in: .00988, 
    I_max: 0.11, 
}, 

{_id: Date(2013-05-08 18:48:40.078325), 
    I_max: 0.100, 
}, 

{ _id: Date(2001-08-09 23:48:43.083454), 
    V_out: 2.44, 
    I_in: .00988, 
    I_max: 0.11, 
}, 

Dziękuję.

+0

Czy Twoje punkty pomiarowe mają jakieś powiązania? Czy znaczniki czasu są unikalne dla pomiaru lub czy wiele pomiarów (różnych parametrów) ma dokładnie taki sam znacznik czasu? Jaka jest wymagana rozdzielczość znacznika czasu (milisekundy, mikrosekundy itp.)? – engineerC

+0

freq. timestamp ~ 100millis i planując użyć timestamp jako unikalnego Id jeśli to możliwe (noSQL) Będę aktualizować pytanie. – xcorat

Odpowiedz

2

Dla uproszczenia, po prostu wykonam tabelę znaczników czasowych z kolumną dla każdego punktu pomiarowego, a całkowity klucz podstawowy będzie technicznie nadmiarowy, ponieważ znacznik czasowy jednoznacznie identyfikuje punkt pomiarowy, jednak łatwiej jest odnieść się do konkretnego wiersza według numeru, a nie według znacznika czasu. Będziesz mieć wartości zerowe dla dowolnego zmierzonego parametru, który nie został pobrany podczas tego znacznika czasu, co zajmie kilka dodatkowych bitów na wiersz (logarytm 2 liczby kolumn, zaokrąglone w górę), ale nie będziesz musiał również wykonywać żadnych połączeń . Jest prawdą, jeśli zdecydujesz, że chcesz dodać kolumny później, ale to naprawdę nie jest trudne, a możesz po prostu zrobić inną osobną tabelę, która jest kluczem do tego.

Proszę zobaczyć tutaj na przykład z danymi: http://www.sqlfiddle.com/#!2/e967c/4

Polecam co jakiś manekina baz danych o dużych rozmiarach, aby upewnić się co struktura użyć nadal wykonuje odpowiednio.

Propozycja smells podobna do EAV, której należy unikać, jeśli planujesz skalowanie.

Powiązane problemy