Django - определяет поля модели и создает модель во время выполнения на основе заголовка файла CSV - PullRequest
0 голосов
/ 17 июня 2019

Мне нужно определить наилучший подход для определения структуры моделей моего приложения Django во время выполнения на основе структуры выгруженного файла CSV, который будет поддерживаться постоянным после создания моделей в Django.

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

Я создаю сайт, на котором пользователь может загрузить CSV-файл на основе временных рядов со множеством столбцов, представляющих сенсорные каналы. Затем пользователь должен иметь возможность выбрать поле для построения соответствующих данных этого поля. Данные будут примерно 1 миллиард строк.

По сути, я стараюсь кодировать в следующих шагах, но информации мало, и я никогда раньше не выполнял такую ​​работу:

  1. Пользователь выбирает файл CSV (или DAT).
  2. Затем приложение загружает только строку заголовка (эти файлы> 4 ГБ).
  3. Строка заголовка разделена на ",".
  4. Я использую результаты 3 для создания таблицы для каждого канала (столбцов) с именем поля, совпадающим с отдельной записью заголовка для этого конкретного канала.
  5. Затем я загружаю соответствующие данные в соответствующие таблицы и записываю свои модели для своего приложения, которые затем не будут изменены.

Другой вариант, который я рассматриваю, - это создание модели с 10 полями, поскольку я знаю, что никогда не будет более 10 каналов. Затем читая мой CSV в таблицу, когда пользователь загружает файл, и просто оставляя эти поля пустыми.

Кто-нибудь имел опыт работы с подобными приложениями?

1 Ответ

0 голосов
/ 17 июня 2019

Это много записей, никогда не работал с таким количеством.Для производительности идея фиксированных полей звучит лучше всего.Если вы используете PostgreSQL, вы можете посмотреть на поле JSON, но не знаете, какое влияние окажет такое количество строк.

Для гибких моделей вы можете использовать шаблон EAV, но это работает только для небольших наборов данных по моему опыту.

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