Лучший формат временных рядов для запросов и преобразования в Matlab (HDF5)
У меня есть несколько уникальных проблем, которые похожи на проблему здесь:
https://news.ycombinator.com/item?id=8368509
У меня есть высокоскоростной блок анализа трафика, который захватывает со скоростью около 5 Гбит / с и выбирает из него определенные пакеты для сохранения в каком-либо формате в программе на C++. Каждый день, вероятно, будет записано 1-3 ТБ на диск. Поскольку это сетевые данные, все временные ряды вплоть до наносекундного уровня, но было бы неплохо сохранить их на втором или миллисекундном уровне, а потом другое приложение отсортировало бы встроенные временные метки с более высоким разрешением. Моя проблема - решить, какой формат использовать. Мои два требования:
- Иметь возможность непрерывной записи на диск со скоростью около 50 МБ / с с несколькими различными временными метками.
- Уметь экспортировать порции этих данных в MATLAB (HDF5).
- Запросите эти данные один или два раза в день для аналитических целей
Еще одна приятная вещь, которая не является жестким требованием:
- 4 из этих блоков будут работать независимо друг от друга, и было бы неплохо выполнить запрос по всем из них и объединить данные, если это возможно. Я должен упомянуть, что все 4 из этих блоков находятся в физически разных местах, поэтому есть некоторые издержки в обмене данными.
Второе - это то, что я не могу изменить из-за устаревших приложений, но я думаю, что первое более важно. Типы запросов, которые я могу захотеть экспортировать в matlab, похожи на "Извлечь метрику X между временем Y и Z", так что в конечном итоге это должно было бы перейти в формат HDF5. Существует внешняя библиотека под названием MatIO, которую я могу использовать для записи файлов Matlab, если это необходимо, но было бы еще лучше, если бы не было шага перевода. Я прочитал всю ветку, упомянутую выше, и есть много опций, которые выделяются: kdb+, Cassandra, PyTables и OpenTSDB. Кажется, что все они делают то, что я хочу, но я не могу понять, насколько легко было бы перевести его в формат MATLAB HDF5, и если что-то из этого сделает это труднее, чем другим.
Если у кого-то есть опыт в создании чего-то подобного, это очень поможет. Спасибо!
1 ответ
Тикерная установка KDB+, безусловно, способна собирать данные с такой скоростью, однако есть много вещей, которые вам необходимо убедиться (какое бы решение вы ни выбрали)
- Достаточно ли ядер у компьютеров, которые захватывают данные? Лучше всего
taskset
например, тикерплан, в ядро, с которым ничто другое не поспорит - Аналогично с диском - SSD, убедитесь, что на шине нет конфликтов
- Разделите рабочую нагрузку - можете записывать разные типы данных (может быть, пакеты могут быть разбиты по источникам или потокам?) В разные процессы cpus/disk /tickerplant.
В принципе, есть много способов, как это сделать. Однако я могу сказать, что с соответствующим оборудованием KDB+ может справиться с этой задачей. Однако, учитывая, что вы хотите HDF5, возможно, даже лучше иметь простой процесс сбора данных и записи / преобразования на диск на лету.