Перенос файлов со старого выделенного сервера на новый - PullRequest
0 голосов
/ 24 января 2012

Используя Классический ASP (прекратить ругаться), мне нужно создать приложение, которое переносит фотографии в высоком разрешении с одного сервера на другой, около 360 000, включая эскизы, если быть точным. Приложение будет вызываться по расписанию Windows и работать в фоновом режиме.

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

Очевидно, что это будет междоменная передача, поэтому я подумывал об использовании компонента ASP / FTP, и по одному, захватить файл, отправить его и записать его успех в таблицу БД, чтобы он знал что сделано до сих пор.

Лучше ли обрабатывать по одному файлу за раз и обновлять, чтобы он не использовал ресурсы сервера, или мне нужно обрабатывать 1000 за раз или больше? Я хочу, чтобы это было как можно быстрее, но без засорения сервера.

Любая помощь / предложения будут с благодарностью приняты.

Ответы [ 3 ]

1 голос
/ 25 января 2012

Я думаю, что лучше всего делать по одному файлу за раз, потому что, если соединение прерывается на короткое время, вы не потеряете файлы, которые уже отправили.

Даже когда вы используете ASP Classic, вы можете воспользоваться .net для загрузки файлов с использованием классов FTP-клиентов в .net и избежать покупки / установки стороннего компонента. Конечно, .net уже установлен на сервере.

Мой процесс будет выглядеть так:

  1. Загрузка 1 файла по FTP (лучшая производительность)
  2. В случае успеха вызовите страницу ASP, на которой записано действие в удаленной БД
  3. Подождите секунду и повторите попытку до 3 раз, если ошибка загрузки
  4. Перейти к следующему файлу

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

1 голос
/ 25 января 2012

У меня что-то подобное работает в Classic ASP, он обрабатывает десятки тысяч изображений без проблем. На сервере с изображениями я запускаю скрипт (vbs), который для каждого изображения

  1. Создает текстовый файл с метаданными
  2. Делает миниатюру и копию изображения среднего размера на втором (веб) сервере

Сценарий выполняется непрерывно и проверяет только для каждой папки и файла, присутствуют ли файлы на веб-сервере и, если они не создаются, нет необходимости в БД. Между каждой проверкой спит секунда. Вот так нагрузка на сервер составляет всего 2%. Я использую iPhoto в режиме командной строки для извлечения метаданных и изображений, но вы можете использовать библиотеку для этого. Таким образом, эти три файла хранятся на веб-сервере в копии структуры карты с первого сервера, но без полноразмерных изображений.

На веб-сервере вам нужно только просматривать эскизы и визуализировать метаданные и изображения среднего размера. Если пользователю нужно полноразмерное изображение, он щелкает средним размером, который имеет URL-адрес файла на первом сервере.

0 голосов
/ 24 января 2012
  • Загрузить все файлы через FTP
  • Создайте файл CSV со всеми вашими данными
  • Вытащите его в БД за один раз

Узким местом будет количество сетевых рукопожатий, превышающее 360 000 отдельных транзакций.

...