2012-05-01 1 views
6

У меня есть ведро с двумя типами имен файлов:амазонка s3 переименование и перезапись файлов, рекомендации и риски

  1. [Bucket]/[file]
  2. [Bucket]/[folder]/[file]

К примеру, я мог бы иметь:

  1. MyBucket/bar
  2. MyBucket/foo/bar

Я хочу, чтобы переименовать все файлы в [Bucket]/[folder]/[file][Bucket]/[file] файлов (и, таким образом перезапись/отбрасывания [Bucket]/[file] файлов).
Так, как и в предыдущем примере, я хочу, чтобы MyBucket/foo/bar стал MyBucket/bar (и перезаписать/открыть оригинал MyBucket/bar).

Я попробовал два метода:

  1. Использование команды перемещения s3cmd в: s3cmd mv s3://MyBucket/foo/bar s3://MyBucket/bar
  2. Использование SDK Амазонки для PHP: rename(s3://MyBucket/foo/bar, s3://MyBucket/bar)

Оба метода, кажется, работают, но - учитывая, что я должен сделать это как пакетный процесс на тысячах файлов,
мои вопросы:

  1. Какой способ является предпочтительным?
  2. Есть ли другие лучшие методы?
  3. Должен ли я удалять старые файлы до перемещения/переименования? (кажется, что он работает без него, но я мог не знать о рисках)

Спасибо.

+0

Здравствуйте! Я также пытаюсь переместить и перезаписать папки (и их файлы) в одном ведро, и я заметил, что у вас было: rename (s3: // MyBucket/foo/bar, s3: // MyBucket/bar). Как это работает в PHP? Или эта строка просто работает дословно на EC2? – Schodemeiss

+0

@ AndyBarlow, я написал сообщение об этом в: http://eyalarubas.com/log/2012/10/16/using-aws-s3-stream-wrapper-for-php/. Свяжитесь со мной, если у вас есть еще вопросы. – EyalAr

ответ

4

Поскольку я задавал этот вопрос около 5 месяцев назад, у меня было время, чтобы получить некоторые идеи; поэтому я отвечу сам:

Из того, что я видел, нет большой разницы в производительности. Я могу себе представить, что вызов s3cmd из PHP может быть дорогостоящим из-за вызова внешнего процесса для каждого запроса; но опять же - SDK от Amazon использует cURL для отправки своих запросов, поэтому нет большой разницы.

Одно из отличий я заметил, что SDK Амазонки стремится бросить Curl исключения (вроде бы случайно, и редко), но s3cmd не разбился на всех. Мои скрипты работают на десятках тысяч файлов, поэтому мне пришлось усердно изучить эти исключения cURL.
Моя теория заключается в том, что cURL падает, когда на сервере возникает конфликт связи (например, когда два процесса пытаются использовать один и тот же ресурс). Я работаю над сервером разработки, на котором иногда несколько процессов одновременно обрабатывают S3 с помощью cURL; это единственные ситуации, в которых cURL демонстрирует такое поведение.

Для заключения:
Использование s3cmd может быть более стабильной, но с использованием SDK позволяет большую гибкость и более тесную интеграцию с вами PHP код; до тех пор, пока вы не забудете обрабатывать редкие случаи (я бы сказал, что 1 для каждых 1000 запросов, когда несколько процессов запускаются одновременно), в которых SDK выбрасывает исключение cURL.

2

Поскольку любые методы, s3cmd и SDK, будут эвельтально выдавать один и тот же вызов REST, вы можете безопасно выбрать тот, который вам подходит.

Когда вы перемещаете файл, если цель существует, она всегда заменяется, а затем, если вы не хотите этого поведения, вам нужно будет проверить, существует ли имя целевого файла для выполнения или а не операция перемещения.

+0

Благодарим вас за ввод. – EyalAr

Смежные вопросы