Вставить 100 тыс. Строк в базу данных с веб-сайта - PullRequest
1 голос
/ 27 октября 2010

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

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

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

Спасибо, Y

Ответы [ 3 ]

4 голосов
/ 27 октября 2010

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

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

1 голос
/ 27 октября 2010

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

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

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

0 голосов
/ 27 октября 2010

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

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

...