Доброго времени суток!
Технологии:
ASP.NET MVC 5, Entity Framework 6, SQL Server 2008/MySQL
Задача:
Есть web-приложение (ASP.NET MVC), в котором пользователь загружает файлы (upload) с определенной структурой (один файл за раз). В файлах содержится много данных (средне-структурированных). После загрузки файла, необходимо с помощью определенных бизнес-правил "раскидать" все данные из загружаемого файла в примерно 15 таблиц.
Идея:
Так, как отработка бизнес-правил и "раскидывание" данных из одного файла может занять достаточно много времени, было решено организовать некую очередь "на распаковку" (реализовав очередь с помощью таблицы QueueTable описанной ниже), а саму очередь обрабатывать уже отдельным сервисом (либо windows service, либо простое console application) на сервере.
Получается после upload'a от ASP.NET MVC данные о файле сохраняются в таблицу примерно такого вида со статусом InProgress(1):
CREATE TABLE QueueTable
(
Id int,
FilePath varchar(255),
StatusId int
);
StatusId принимает значения InProgress(1), Errors(2), Success(3).
Соответственно консольное приложение должно вытаскивать из этой очереди все строки со статусом InProgress(1), отрабатывать все бизнес-правила и "раскидывать" данные по всем необходимым таблицам и в случае если все прошло успешно менять статус в очереди на Success(3) или если вылетел Exception, то менять статус на Errors(2).
Вопросы:
1. Удачно ли выбран подход к решению задачи, или есть более оптимальное решение по "сложной" обработке файлов?
2. Хотелось бы также распараллелить работу по обработке очереди. Подскажите, пожалуйста, пример того, как мог бы выглядеть такой сервис(console application), чтобы понять в какую сторону смотреть? Также хотелось бы в этом распараллеленном сервисе при работе с БД использовать Entity framework, если это будет возможно.
Заранее благодарю за любую помощь!