Я ищу несколько направлений относительно того, какое лучшее решение для баз данных было бы для хранения множества наборов данных из инженерных тестов, экспериментов, результатов моделирования и т. Д.
Некоторые определения:
Набор данных: В основном это набор временных рядов. Каждый временной ряд представляет датчик, который был зарегистрирован во время инженерной деятельности. Частота регистрации может сильно варьироваться в зависимости от типа задачи (обычно в диапазоне от 1 до 1000 Гц)
Канал: отдельные временные ряды в наборе данных
Время: каждый канал в наборе данных имеет свой собственный вектор времени. Они могут потенциально все отличаться от каждого. Время относительное и начинается с 0 с
В рамках одного и того же проекта мы соберем много наборов данных, и каждый набор данных будет очень похож на предыдущий, но почти никогда не будет прежним, например. новые или удаленные каналы, другая частота регистрации, другая длина (возможно, 1 набор данных из 10-секундного моделирования, в то время как следующий набор данных из 10-минутного полевого теста)
Вместе с каналами каждый набор данных также содержит другую информацию, которую нам нужно хранить, но они не обязательно должны храниться здесь, у нас уже есть собственное решение на основе SQL.
Чтобы дать некоторым действительным числам для реального проекта, нам может понадобиться хранить:
100 наборов данных
200 каналов каждый набор данных
средняя частота записи 500 Гц
средняя длина набора данных 10 минут
Это приведет к:
- 60 миллионов баллов за набор данных
Критерии выбора базы данных:
Необходимая информация для хранения:
- Уникальный идентификатор, связанный с каждым каналом (этот идентификатор является идентификатором прогона)
- Единицы для каждого канала
- время и вектор данных
Запрос к БД:
Я все еще нахожусь на стадии мозгового штурма, и я не уверен на 100%, какой запрос нам нужно выполнить, но я не думаю, что мы получим очень сложный запрос. Причина, по которой я это говорю, заключается в том, что у нас есть очень сложный код, который мы выполняем для вычисления метрик, и реализация / перенос его на другой язык / сейчас, вероятно, не вариант (сейчас это означает следующие несколько лет).
Я считаю, что наиболее типичный запрос будет выглядеть примерно так (в псевдо-SQL-подобном):
ВЫБЕРИТЕ «Датчик давления 1»> 60 бар ОТ «всей базы данных»
Затем я посмотрю, что произошло при выполнении условия и когда во время выполнения.
Затем в отдельной среде я собираю данные и вычисляю метрики.
Вот почему я не думаю, что запросы станут очень сложными, но я думаю, что они будут очень "проиндексированы по времени".
Я просматривал базы данных временных рядов и играл с InfluxDB. Я думаю, я мог бы заставить это работать с этим, но я не уверен насчет масштабируемости.
Я действительно новичок в базах данных NoSQL, поэтому любое ваше предложение определенно увеличит мои знания.
Я также посмотрел на Redis. Он кажется самым быстрым и, вероятно, также хорошим решением, учитывая различную структуру данных, которую он может хранить. Тем не менее, я не уверен, что это база данных в памяти ... означает ли это, что все будет храниться в оперативной памяти?
Во всяком случае, как я уже сказал, я нахожусь в стадии мозгового штурма этих усилий, поэтому, пожалуйста, не стесняйтесь комментировать все, что вы можете придумать.
Заранее спасибо,
Guido