Я создаю систему, которая опрашивает устройства на предмет данных по различным показателям, таким как загрузка ЦП, загрузка диска, температура и т. Д. С (вероятно) 5-минутными интервалами с использованием SNMP. Конечная цель - предоставить пользователю системы визуализацию в виде графиков временных рядов.
Я рассматривал использование RRDTool в прошлом, но отверг его, так как хранение захваченных данных на неопределенный срок важно для моего проекта, и мне нужен более высокий уровень и более гибкий доступ к собранным данным. Итак, мой вопрос действительно таков:
Что лучше: реляционная база данных (например, MySQL или PostgreSQL) или нереляционная база данных или база данных NoSQL (например, MongoDB или Redis) с точки зрения производительности при запросе данных для построения графиков.
Для реляционной базы данных я бы использовал таблицу data_instances
, f
- это частота , на которой запрашиваются данные, и t
- это общее количество времени , в течение которого система собирала данные.
Для пользователя, записывающего 10 показателей для 3 устройств каждые 5 минут в течение года, у нас будет чуть менее 5 миллионов записей.
Без индексов на fk_to_device
и fk_to_metric
сканирование этой постоянно расширяющейся таблицы заняло бы слишком много времени. Поэтому индексирование вышеупомянутых полей, а также отметки времени
(для создания графиков с локализованными периодами) является обязательным.
MongoDB имеет концепцию коллекции ], в отличие от таблиц, они могут быть созданы программно без настройки. С их помощью я мог бы разделить хранилище данных для каждого устройства или даже каждой метрики, записанной для каждого устройства.
У меня нет опыта работы с NoSQL, и я не знаю, предоставляют ли они какие-либо функции повышения производительности запросов, такие как индексирование, однако предыдущие В параграфе предлагается выполнять большую часть традиционных реляционных запросов в структуре, в которой данные хранятся в NoSQL.
Будет ли реляционное решение с правильной индексацией сокращаться до обхода контента в течение года? Или структура подходов NoSQL на основе коллекций (которая соответствует моей ментальной модели хранимых данных) дает заметное преимущество?