У меня есть пока следующие соображения:
1. поскольку при поиске данных всегда фигурирует id устройства и временной диапазон, то можно это дело хранить в hdfs в структуре типа /id_устройства/день/файл_с_данными. Соответственно нужный файл (~400мб) или файлы мы можем быстро найти, а затем данные в нем мы фильтруем с помощью чего-либо (spark, flink или hive??).
2. Можно хранить данные в кластере с elasticsearch выпилив ненужные поисковые причиндалы (full-text) из структуры данных. Идея такая: создаем каждый день новый индекс(аля база данных в реляционных терминах) где к названии индекса будем в постфиксе добавлять текущую дату. В индексе будет будет где-то 130-150 шардов (т.к. 1 шард это максимум ~2 миллиарда событий). Поисковый запрос в elasticsearch позволяет искать сразу в нескольких индексах (можно использовать соответствующие паттерны в запросе). Плюс в эластике каждое поле уже автоматом является индексом что большой плюс. Тут очень интересно насколько адекватно такой кластер с таким количеством шардов будет работать
Одно событие весит примерно 150 байт. С учетом необходимость большого количества ssd это под вопросом. А если разливать события вручную на диск, то фактически вы предлагаете использовать полностью самописное решение для шардинга, репликации, индексации и тд, что конечно же не комильфо
Clickhouse конечно хорош, но это OLAP решение, а мы аналитические запросы не будем делать, нам нужна только фильтрация. Плюс там есть ограничение - результат выполнения запроса должен помещаться в оперативку на одном сервере.
Aerospike - это kev/value БД, т.е. сортировку и поиск по критериями уже не выполнить. Возможно ошибаюсь, т.к. с этой базой глубоко не знаком.
DynamoDB - платная, руководство такое врядли пропустит, плюс это также key/value БД
"быстро" - поиск не более 5-10 секунд за конкретную дату и не более 30-60 если поиск производится за месяц.
"устойчивым к отказам узлов" - при отказе узла данные не должны теряться, т.е. нужна авто репликация данных
"быть надежным и проверенным решением" - малоизвестное решение, которое не решало схожего масштаба задачи не рассматривается
И оценочную $ - бесплатное и opensource решение
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
hdfs - используем для хранения данных, MapReduce - для аналитики