Мы работаем на IoT-устройствах с поддержкой HomeKit.HomeKit разработан для потребительского использования и не имеет возможности собирать метрики (мощность, температура и т. Д.), Поэтому нам необходимо реализовать его отдельно.
Допустим, у нас есть 10 000 устройств.Они отправляют одну коллекцию метрик каждые 5 секунд.Поэтому каждую секунду нам нужно получать 10000/5 = 2000 коллекций.Конечный пользователь должен видеть графики каждой метрики за указанный период времени (1 неделя, месяц, год и т. Д.).Таким образом, каждый день система будет получать 172,8 миллиона записей.Здесь возникает много вопросов.
Прежде всего, нет необходимости хранить все данные, так как пользователю нужны только графики за указанный период, поэтому он нуждается в некоторой агрегации.Какое решение для базы данных ему подходит?Я считаю, что ни одна RDMS не будет обрабатывать такой объем данных.Тогда как получить средние данные метрик для представления их конечному пользователю?
AWS имеет общую архитектуру обработки данных временных рядов:
Оченьупрощенно я думаю об этом так:
- Устройства отправляют данные непосредственно в DynamoDB с помощью HTTP API
- Метрики хранятся в одной таблице за 24 часа
- В концедня некоторые процедуры выполняются в Elastic Map Reduce и создают готовые файлы JSON с данными, необходимыми для отображения графиков за период времени.
- Старые таблицы хранятся в RedShift для дальнейших приложений.
Кто-нибудь уже делал что-то подобное раньше?Может быть, есть более простая архитектура?