RoR: сброс промежуточной таблицы после обработки загруженного пользователем CSV-файла?
Я довольно новичок в Ruby on Rails и изучаю его с помощью учебника по Ruby on Rails Майкла Хартла.
Сейчас я работаю над своим собственным проектом, который позволяет пользователям входить на веб-сайт, предоставлять личную биометрическую информацию и загружать CSV-файл по своему выбору (данные о тренировках), чтобы заполнить базу данных информацией о тренировках.
Я обратился за помощью к другим друзьям с большим опытом, и их совет состоял в том, чтобы создать промежуточную таблицу и использовать промежуточную таблицу для заполнения других таблиц (в настоящее время у меня есть восемь различных таблиц для измерений тренировки).
Я провел немало исследований по использованию промежуточной таблицы в Интернете, но не смог найти надежного ответа на вопрос, как эффективно использовать промежуточную таблицу для импорта файла CSV в несколько моделей.
Исходя из моего понимания промежуточных таблиц, я должен сбрасывать промежуточную таблицу каждый раз, когда я (пользователь) завершил загрузку и импорт файла csv в базу данных, но не смог найти в Интернете ничего о том, является ли это правильным методом или нет.
Правильный ли это подход к использованию промежуточных таблиц? Единственный другой вариант, о котором я могу подумать, - это создание и удаление промежуточной таблицы каждый раз, когда пользователь загружает файл, но это кажется слишком дорогостоящим, чтобы оно было правильным.
Спасибо!
1 ответ
"Промежуточная таблица" - это просто промежуточная таблица, которая будет иметь типы полей в том же формате, что и ожидаемый CSV. Когда пользователь загружает файл CSV, вы можете прочитать строку CSV и заполнить эту таблицу. Наличие промежуточного сервера имеет то преимущество, что любая дорогостоящая обработка данных перед заполнением реальных таблиц домена может выполняться в фоновом режиме. Два подхода для этого описаны ниже:
Запустить фоновую обработку после сохранения набора данных в промежуточной таблице.
После загрузки данных на промежуточный сервер вы можете запустить фоновое задание для обработки данных и асинхронного заполнения моделей в бэкэнде. Я бы порекомендовал библиотеку
sidekiq
для этого. Многие другие альтернативы доступны в Ruby ToolboxCron рабочих мест
Используя этот подход, у вас есть функция, которая периодически проверяет промежуточную таблицу и затем заполняет данные, заполненные до настоящего времени, в соответствующие целевые таблицы. Подходящая рубиновая библиотека для этого
whenever
драгоценный камень.
Вам не нужно обрабатывать промежуточный стол за один раз, и удаление промежуточного стола после операций, безусловно, не рекомендуется. Что произойдет, если кто-то попытается загрузить данные в промежуточную таблицу во время ее удаления. Клиент-серверные системы должны быть спроектированы таким образом, чтобы их могли использовать несколько пользователей одновременно. Хорошей стратегией является ленивая обработка данных в промежуточной таблице по одной строке за раз - и эти строки можно удалить после обработки.
Также для более простого варианта использования (единственная последовательность сохранения - обработки - удаления) вы можете просто сохранить CSV на диске и обработать его в фоновом режиме с помощью стратегий, упомянутых выше, устраняя необходимость в промежуточной таблице. Промежуточная таблица особенно полезна, если вы планируете заполнить несколько хранилищ данных (возможно, распределенных по географическим границам) и / или выполнить обработку несколькими работниками, одновременно обрабатывая данные.