Я много читал о разных базах данных NoSQL, но я все еще не решил, какое решение будет наиболее подходящим в моей ситуации – возможно, потому, что у меня нет опыта работы с базами данных NoSQL, кроме REDIS, которые я использую для кеширования.
В моем сценарии я должен хранить исторические значения, основанные на времени (смешанные float, integer, логические значения, основанные на datapoint), для примерно 200 000 точек данных. Обычно каждый datapoint получает новое значение каждые 15 минут или меньше, общая сумма в диапазоне от миллиарда значений в год . Некоторые точки данных могут даже хранить значение каждые несколько секунд, до теоретического максимума 31 536 000 значений в год для одного datapoint (нам не нужна точность второй секунды), но это будет редко.
В будущем количество точек данных может быть легко удвоено, а это значит, что оно должно быть масштабируемой системой.
Чтобы визуализировать данные, необходимо иметь возможность быстро анализировать данные одного набора данных в любом сохраненном временном диапазоне – будь то несколько часов или целый год. В этом диапазоне мне нужны значения min / max / avg в определенном разрешении, как правило, временной диапазон, деленный примерно на 1000.
В mySQL это будет сделано следующим образом:
SELECT TRUNCATE(Timestamp / 3600) AS slot, MIN(value), AVG(value), MAX(value) FROM data WHERE Timestamp >= [from] AND Timestamp < [to] AND DatapointID = [some ID] GROUP BY 1
… которые будут возвращать данные для графика с точностью до 1 часа.
Как это можно сделать с базами данных NoSQL, чтобы информация была доступна всего за несколько миллисекунд?
Это моя главная забота.
Данные добавляются примерно в режиме реального времени, поэтому не должно быть много операций записи. Обновления существующих данных должны быть возможны, но будут крайне редкими. Данные будут отсортированы по времени, но я не могу этого гарантировать.
Какая база данных NoSQL лучше всего подходит для этих нужд и как можно выполнить вышеуказанный запрос данных?