Каков наилучший способ хранения данных временных рядов тысяч (но может стать миллионами в скором времени) аппаратных датчиков реального мира? Сами датчики разные, некоторые просто фиксируют одну переменную, некоторые до десятка. Мне нужно хранить эти значения каждый час, и я не хочу удалять данные, которые старше х, т.е. Данные будут продолжать расти.
В настоящее время я использую базу данных mySQL для хранения этих временных рядов (которая также служит веб-интерфейсу, который показывает хорошие графики временных рядов для каждого датчика). У меня есть один стол для каждого датчика, который сейчас составляет около 11000 штук. Каждая таблица имеет макет, такой как "timestamp", "value1", [value2]... ".
Основная задача базы данных - больше выборок (каждый раз, когда кто-то смотрит на графики), чем вставки/обновления (один раз в час). Запрос выбора для отображения графика - это просто "SELECT * FROM $sensor_id
ORDER BY timestamp
", поэтому получение информации из моих операторов выбора довольно просто/эффективно.
Однако при наличии многих таблиц при резервном копировании базы данных возникают некоторые проблемы, так как я столкнулся с ограничениями LOCK (например, mysqldump: Got error: 23: Out of resources при открытии файла. /database/table _xyz.MYD ' Errcode: 24) при использовании LOCK TABLES "). Я могу обойти эту ошибку, но, очевидно, это заставило меня задуматься...
Итак, реальный вопрос, разбитый на следующие вопросы:
- Насколько плохо мой подход иметь один стол для каждого датчика? Что, если вместо нескольких тысяч таблиц у меня было несколько миллионов (возможно, в ближайшем будущем мне придется иметь дело с такими многими датчиками)?
- Сохраняет данные всех датчиков в одной комбинированной таблице с дополнительным столбцом, который поддерживает более высокий подход sensor_id, поскольку он, вероятно, замедлит мой оператор select большим количеством (SELECT * from
all_sensors
WHEREsensor_id
= ' $sensor_id ')? Имейте в виду, что разные датчики измеряют разные вещи, поэтому в этой таблице будет несколько десятков столбцов вместо одного-нескольких, если у каждого датчика есть своя таблица? - Я также подумал о сохранении данных временного ряда NOT в mySQL, но вместо этого в файлах с плоским (CSV). Библиотека графиков, которую я использую для интерфейса (dygraphs), отлично разбирается в файлах CSV (плюс это даст мне возможность сделать их доступными для загрузки, что будет бонусом, но в настоящее время это не является требованием). Мне все еще нужна база данных для других связанных с интерфейсом вещей, но это означало бы наличие нескольких десятков таблиц вместо 11000 (или даже больше, если мы добавим больше датчиков).
- Если я создам один файл для каждой таблицы, то я, вероятно, в конечном итоге столкнулся с ограничениями файловой системы (это раздел ext3, поэтому там ~ 32k файлов на лимит каталога). Таким образом, здесь также применяется тот же вопрос, что и выше: должен ли я сохранить его в одном большом файле, который содержит данные всех датчиков? Это, вероятно, замедлит мои чтения еще хуже, так как графическая библиотека должна будет читать гораздо более большой файл в памяти каждый раз, когда кто-то смотрит на график?
Что бы вы сделали?
Спасибо!