2009-08-26 11 views
17

Jestem zainteresowany monitorowaniem niektórych obiektów. Spodziewam się uzyskać około 10000 punktów danych co 15 minut. (Może nie na początku, ale to jest "ogólny park rozrywki"). Chciałbym również uzyskać statystyki dzienne, tygodniowe, miesięczne i roczne. Nie jest ważne, aby dane były przechowywane w najwyższej rozdzielczości (15 minut) przez ponad dwa miesiące.Jakie jest najlepsze rozwiązanie typu open source do przechowywania danych szeregów czasowych?

Rozważam różne sposoby przechowywania tych danych i szukałem klasycznej relacyjnej bazy danych lub w bazie danych bezzapachowych (takich jak SimpleDB).

Moje pytanie brzmi, jaki jest najlepszy sposób na robienie tego? Bardzo bym wolał rozwiązanie typu open-source (i darmowe) o własnościowym kosztownym.

Mała uwaga: Piszę tę aplikację w języku Python.

+0

Prawdopodobnie szuka jakiegoś rozwiązania binningu. Może się okazać, że dyskusja w tym pokrewnym pytaniu jest pomocna: http://stackoverflow.com/questions/1248815/percentiles-of-live-data-capture/1249003#1249003 –

Odpowiedz

11

HDF5, do którego można uzyskać dostęp przez h5py lub PyTables, jest przeznaczony do obsługi bardzo dużych zestawów danych. Oba interfejsy działają dobrze. Na przykład zarówno h5py, jak i PyTables mają automatyczną kompresję i obsługują Numpy.

+0

To wydaje się bardzo interesujące, sprawdzę to. – lorg

8

RRDTool przez Tobi Oetiker, zdecydowanie! Jest open-source, został zaprojektowany do dokładnie takich przypadków użycia.

EDIT:

Aby zapewnić kilka Highlights: sklepy rrdtool danych szeregów czasowych w bazie danych round-robin. Utrzymuje nieprzetworzone dane przez określony czas, a następnie kondensuje je w konfigurowalny sposób, dzięki czemu dane o drobnych szczegółach mówią przez miesiąc, uśredniają dane przez tydzień w ciągu ostatnich 6 miesięcy i uśredniają dane w ciągu ostatniego miesiąca. 2 lata. Efektem ubocznym jest to, że baza danych pozostaje cały czas w tym samym rozmiarze (więc żadne pocenie się dysku nie będzie działać). To była strona magazynu. Po stronie pobierania RRDTool oferuje zapytania danych, które są natychmiast przekształcane w wykresy (np. Png), które można łatwo włączyć do dokumentów i stron internetowych. Jest to solidne, sprawdzone rozwiązanie, które jest znacznie uogólnioną formą w stosunku do swojego poprzednika, MRTG (niektórzy mogli o tym usłyszeć). A kiedy już to zrobisz, zaczniesz go ponownie używać.

Aby uzyskać szybki przegląd i kto korzysta z narzędzia RRDTool, zobacz także: here. Jeśli chcesz zobaczyć, jakie rodzaje grafiki możesz wytworzyć, sprawdź, czy masz gallery.

+0

Byłem świadomy RRDTool, dobrze jest mieć inny "głos" do niego. Przyjrzę się temu głębiej. Na marginesie, czy wiesz, czy możesz z nim korzystać w Pythonie? – lorg

+0

@lorg Nie próbowałem tego sam, ale dokumenty jawnie wymieniają powiązania Python (http://oss.oetiker.ch/rrdtool/prog/rrdpython.en.html) – ThomasH

+0

ma powiązania Python. ale kiedy ostatnio wyglądałem (dawno temu), nie działały świetnie. Kończę właśnie pakowanie interfejsu CLI z podprocesowymi połączeniami, takimi jak ta klasa: http://code.google.com/p/perfmetrics/source/browse/trunk/lib/rrd.py –

1

zwykłe pliki tekstowe? Nie jest jasne, co oznacza 10k punktów danych na 15 minut w przeliczeniu na bajty, ale w jakikolwiek sposób pliki tekstowe są łatwiejsze do przechowywania/archiwizowania/przesyłania/manipulowania i można sprawdzić bezpośrednio, po prostu patrząc. dość łatwo pracować z Pythonem.

1

To jest dość standardowy materiał do przechowywania danych.

Wiele "faktów", uporządkowanych według wielu wymiarów, z których jednym jest czas. Mnóstwo agregacji.

W wielu przypadkach proste, płaskie pliki przetwarzane za pomocą prostych algorytmów agregacji opartych na defaultdict zdziałają cuda - szybko i prosto.

Spójrz na Efficiently storing 7.300.000.000 rows

Database choice for large data volume?

0

istnieje otwarta baza danych źródłowych timeseries pod aktywnego rozwoju (NET tylko na razie), że napisałem.Może przechowywać ogromne ilości (terrabajów) jednolitych danych w stylu "binarnego płaskiego pliku". Wszystkie zastosowania są ukierunkowane strumieniowo (do przodu lub do tyłu). Aktywnie wykorzystujemy go do przechowywania i analizy kleszczy w naszej firmie.

https://code.google.com/p/timeseriesdb/

// Create a new file for MyStruct data. 
// Use BinCompressedFile<,> for compressed storage of deltas 
using (var file = new BinSeriesFile<UtcDateTime, MyStruct>("data.bts")) 
{ 
    file.UniqueIndexes = true; // enforces index uniqueness 
    file.InitializeNewFile(); // create file and write header 
    file.AppendData(data); // append data (stream of ArraySegment<>) 
} 

// Read needed data. 
using (var file = (IEnumerableFeed<UtcDateTime, MyStrut>) BinaryFile.Open("data.bts", false)) 
{ 
    // Enumerate one item at a time maxitum 10 items starting at 2011-1-1 
    // (can also get one segment at a time with StreamSegments) 
    foreach (var val in file.Stream(new UtcDateTime(2011,1,1), maxItemCount = 10) 
     Console.WriteLine(val); 
} 
Powiązane problemy