Вопрос

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

Какую стратегию я должен принять это сделать? Я думал о том, чтобы отобразить «Пожалуйста, дождитесь страницы», пока операция не будет завершена, но я хочу, чтобы он мог продолжать просматривать сайт. Также, поскольку база данных в то время будет вроде занята - не остановит бы людей работать на сайте?

Мой уровень доступа к данным находится в Nibernate.

Спасибо, у

Это было полезно?

Решение

Отображение страницы, пожалуйста, дождитесь, будет довольно недружественным, поскольку ваш пользователь может быть выполнен довольно давно и будет блокировать потоки на вашем веб-сервере.

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

Другие советы

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

Кроме того, серверы баз данных являются надежными, мощными многозадачными системами. Если вы не соблюдали проблему с веб-сайтом, когда произошедшие вставки, не предполагайте, что она остановит людей работать на сайте.

Однако, насколько это далеко или одновременные характеристики чтения / записи идет, есть механизмы для решения этого. Вы можете использовать синтаксис «Вставить низкий приоритет» в MySQL или иметь ваше приложение дросселировать вставки, спящая миллисекунду между каждой вставкой. Кроме того, как вы создаете свои заявления вставки, вы используете связанные параметры или нет, и вы используете многозначные вставки, могут повлиять на производительность вставки и как она влияет на клиентов в значительной степени.

При отправке Вы можете пройти операцию БД на асинхронный запросHHandler и установить значение сеанса, когда его сделано.

В то время как процесс Asynch находится в процессе, вы можете проверить значение сеанса на каждый запрос, и если оно установлено (Operation = Завершено), отображайте сообщение, например, в модальном или каком-либо ли у вас механизм сообщения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top