2012-07-13 13 views
6

Chciałbym wiedzieć, czy hdf5 nadaje się do rejestrowania danych w czasie rzeczywistym, czy nie?Czy hdf5 nadaje się do pomiarów w czasie rzeczywistym?

Dokładniej: Pracuję nad projektem, w którym chcemy ciągle (częstotliwość próbkowania w zakresie od 30 do 400 Hz) wymieszać sporą ilość danych (kilka godzin) różnych rodzajów (telemetria, sygnały, wideo).

Dane muszą być zapisywane w czasie rzeczywistym (lub z niewielkim opóźnieniem), aby zapobiec utracie ich podczas potencjalnej awarii.

Nasz pierwszy prototyp oparty jest na sqlite3, jednak uważamy, że pewne ograniczenia mogą wzrosnąć z długiego użycia: prędkość, jedna baza danych == jeden plik i trudności z dostępem do bazy danych z kilku wątków (Blokowanie wyjątków podczas czytania i pisania w tym samym czasie).

Rozważam więc możliwość użycia hdf5 jako back-end do przechowywania danych na dysku (i numpy/pytable do wewnętrznej reprezentacji). Czy myślisz, że możliwe jest regularne aktualizowanie pliku hdf5 z takiego wiązania Pythona?

Odpowiedz

1

Tabele pakietów HDF5 SĄ odpowiednie do pomiarów w czasie rzeczywistym - jednak lepiej jest użyć pakietów o stałych rozmiarach danych do zwykłego starego pliku posix i późniejszych konwersji. Wynika to z faktu, że HDF5 nie jest w tej chwili bardzo solidny i nie zapewnia różnych gwarancji przy użyciu pliku IO o niskim poziomie - powiedział, że kod niskiego poziomu jest właściwie łatwy w obsłudze. W pewnym momencie jednak, gdy dane, z którymi pracujesz, stają się wystarczająco złożone, HDF5 powinien wejść, ale być świadomym względem pliku IO o niskim poziomie, jest on ciężki i nie może być wielowątkowy z rozsądnym determinizmem/wydajnością z powodu użycia globalnego muteksa. Ponadto, jeśli system ulegnie awarii na przykład, wynikowy plik HDF5 jest śmieci/nie można go odzyskać - zostanie to naprawione jeden dzień, ale wymaga finansowania dla grupy HDF, aby przyspieszyć i zrobić to w następnej dekadzie.

Moja własna polityka polega na używaniu plików dziennika pakietów, gdy tylko jest to możliwe. Następnie natychmiast przekonwertuj wynik na HDF5 po nagraniu tych plików do użytku długoterminowego + kompresja + wykorzystanie przez inne narzędzia/programy. Często wymieniam nagrywarki, aby zrzucić plik HDF5 wyjaśniający strukturę binarną w czasie pisania, więc mogę po prostu odczytać ten plik później, aby zrozumieć, jakie są struktury w plikach dziennika pakietów i przekazać je do prawdziwego pliku HDF po załadowaniu pakietów w pamięci.

Z tym wszystkim, co powiedzieliśmy i zrobiliśmy, spójrz na the packet table api from boeing. Ma także cache w czarnej owcy C++ w bibliotece hl C++, która jest dostarczana z hdf5, chociaż musiałem ją załatać dla moich zastosowań.

Powiązane problemy