Альтернативы динамическому созданию полей модели - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь создать веб-приложение, в котором пользователи могут загружать файл (в частности, формат MDF ) и просматривать данные в виде различных диаграмм. Файлы могут содержать любое количество сигналов на основе времени (различные числовые типы данных), и пользователи могут называть сигналы дико.

Моя мысль о сохранении данных состоит из 2 шагов:

  1. Ведение мастер-таблицы в качестве индекса для сохранения такой метаинформации, как имена файлов, кто ее загрузил, когда и т. Д. Записи (строки) добавляются каждый раз, когда новый файл загружен.
  2. Создайте новую таблицу (я буду называть ее таблицами данных ) для каждого загруженного файла, в пределах таблицы каждый столбец будет представлять собой один сигнал (первый столбец является метками времени) .

В связи с этим возникает проблема, заключающаяся в том, что я не могу предварительно определить Model для таблиц данных, поскольку число, имя и тип данных полей будут различаться практически для всех загружаемых файлов.

Мне известны некоторые библиотеки, которые помогают создавать динамические модели времени выполнения, но все они устарели, и вопросы о них в SO в основном получают ноль ответов. Поэтому, несмотря на все усилия, чтобы заставить это работать, я даже не уверен, что мой подход - оптимальный способ сделать то, что я хочу сделать.

Я также сталкивался с этим полем модели Postgres Specc, которое может принимать вложенные массивы (что, я думаю, соответствует 2-D спискам сигналов на основе времени). Теоретически я мог бы проанализировать необработанный загруженный файл и создать такой массив и в основном сохранить все данные в одном поле. Не зная предела размера данных, это также может стать кошмаром для последующих запросов, поскольку для создания диаграмм обычно требуется всего несколько столбцов сигналов за раз по сравнению с общим количеством до сотен сигналов.

Итак, мой вопрос:

Есть ли лучший способ организовать хранение данных? И как?

Любое понимание очень ценится!

1 Ответ

1 голос
/ 12 мая 2019

Если имя, номер и типы данных полей будут отличаться для каждого пользователя, то вам не требуется ORM.Что вам нужно, так это построитель запросов или композиция строк SQL, например Psycopg .Вы будете программно создавать таблицу для каждой комбинации пользователя и загружаемого файла (если они различаются) и программно вставлять записи.

Использование postgresql может быть хорошим выбором, вы также можете создать индекс GIN длямассивы для ускорения запросов.

Однако, если вы в основном работаете с данными временных рядов, тогда используйте базу данных временных рядов , такую ​​как InfluxDB, поэтому Prometheus имеет больше смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...