Требуются мнения / экспертиза / предложения - предоставьте отзыв от php, выполняющего длинную задачу - PullRequest
0 голосов
/ 27 августа 2010

Я думаю о том, чтобы преобразовать приложение Visual Basic (которое принимает файлы с разделителями каналов и импортирует их в базу данных Microsoft SQL) в страницу php.Один из этих файлов имеет в среднем около 9 мегабайт.(Я не могу быть точным в отношении количества задействованных строк, но я бы сказал, что это около 20 тысяч)

Одним из преимуществ является то, что любые изменения, внесенные на страницу, будут автоматически «развернуты» на предполагаемуюпользователь (в настоящее время, когда я делаю изменения в приложении Visual Basic, которое изначально было создано кем-то другим, я должен поставить последнюю версию на все ПК людей, которые его используют).

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

Лучшая идея, которую я могупока думать о том, чтобы использовать ajax, чтобы сделать это постепенно.Скажем, импортируйте 1000 записей за один раз, затем возвращайтесь, внедряйте следующие 1000, возвращайтесь и т. Д.

Существуют ли более эффективные способы выполнения таких задач, которые не требовали бы от меня изучения новых языков программирования?или скачать приложения или библиотеки?

Ответы [ 2 ]

2 голосов
/ 27 августа 2010

Вам не нужно переключать Visual Basic -> PHP.Вы можете придерживаться синтаксиса VB в приложениях ASP или ASP.NET.С помощью решения на базе ASP вы можете многократно использовать существующий код, чтобы он не изучал новый язык / с нуля.

Что касается того, как представить пользователю длительный процесс, вы 'ищите «Асинхронные обработчики» - основной предпосылкой является то, что пользователь посещает веб-страницу (A), которая запускает страницу процесса (B).

  • (A) инициирует (B), отчеты начинаются спользователь и настраивает страницу для перезагрузки за n секунд.
  • (B) выполняет всю тяжелую работу - как ваше существующее приложение VB.Ход выполнения хранится в некотором совместно используемом пространстве (плоский файл, база данных, кэш-память и т. Д.)
  • После перезагрузки (A) сообщает о текущем прогрессе (B), используя доступ только для чтения к совместно используемому пространству (B).) отслеживает прогресс.

Область действия (A):

  • Поиск запущенного (B) процесса - отчет о состоянии, если он найден, илиначать новый (B) процесс.Поскольку (B), по-видимому, основан на существовании файлов (из вашего описания), вы можете предоставить (A) возможность определить, есть ли какая-либо точка в вызове (B) или нет (т. Е. Если файлы существуют, вызовите (B) иначе сообщите: ничего не делать ) или вы можете оставить прицелы совершенно свободными и позвонить (B).
  • Сообщите о прогрессе (B).
  • Должно занять оченьмало времени для выполнения, возможно, потребуется включить HTTP-заголовок обновления, чтобы пользователь автоматически получал обновления.

Область действия (B):

  • То же, что исуществующий сценарий VB - ищите файлы, загружайте… yada yada yada.
  • Выполнение аналогичного сценария VB займет 2 минуты

Потенциальные улучшения:

  • (A) может использовать интерфейс AJAX, поэтому вместо перезагрузки страницы (обновление HTTP) вызов AJAX выполняется каждые n секунд и просто состояниякоробка обновлена.Какой-то анимированный значок (вращающееся колесо) создаст у пользователя впечатление, что что-то происходит между обновлениями.
  • Похоже, что (B) может выиграть от многопоточного подхода (загрузка нескольких файлов одновременно) в зависимости ото том, связаны ли файлы.Как указал Пони, для такой загрузки может быть лучшая стратегия, но это совсем другая тема:)
  • Может потребоваться какой-то подход семафора / флага, если страница (A) может быть одновременноодновременное нажатие нескольких пользователей, и (B) требуется несколько секунд для запуска и создания отчета о состоянии ».

Оба (A) и (B) могут быть разработаны с использованием технологии PHP или ASP.

1 голос
/ 27 августа 2010

Как вы импортируете данные в базу данных? В идеале вы должны использовать BULK INSERT SQL Server, что, вероятно, ускорит процесс. Но это все еще вопрос загрузки файла для разбора ...

Я не думаю, что это стоит усилий, чтобы получить статус вставок - большинство сайтов отображают только анимированный GIF / и т. Д. (Например, песочные часы и т. Д.), Чтобы показать, что система обрабатывает вещи, но никаких реальных деталей.

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