2012-05-01 37 views
6

Tôi có một xô với hai loại tên file:amazon s3 đổi tên và ghi đè tập tin, khuyến nghị và rủi ro

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

Ví dụ, tôi có thể có:

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

Tôi muốn đổi tên tất cả các [Bucket]/[folder]/[file] file [Bucket]/[file] file (và do đó ghi đè/loại bỏ các [Bucket]/[file] tập tin).
Vì vậy, như trong ví dụ trước, tôi muốn MyBucket/foo/bar để trở thành MyBucket/bar (và ghi đè/duscard bản gốc MyBucket/bar).

tôi đã cố gắng hai phương pháp:

  1. Sử dụng lệnh di chuyển s3cmd của: s3cmd mv s3://MyBucket/foo/bar s3://MyBucket/bar
  2. Sử dụng SDK của Amazon cho php: rename(s3://MyBucket/foo/bar, s3://MyBucket/bar)

Cả hai phương pháp có vẻ làm việc, nhưng - cân nhắc tôi phải làm đây là một quy trình theo lô trên hàng nghìn tệp,
câu hỏi của tôi là:

  1. Phương pháp nào được ưa thích hơn?
  2. Có phương pháp nào khác tốt hơn không?
  3. Tôi có phải xóa các tệp cũ trước khi di chuyển/đổi tên không? (có vẻ như hoạt động tốt mà không có nó, nhưng tôi có thể không nhận thức được rủi ro liên quan)

Cảm ơn bạn.

+0

Xin chào! Tôi cũng đang cố gắng di chuyển và ghi đè lên các thư mục (và các tệp nằm của chúng) trong một nhóm duy nhất và tôi nhận thấy bạn đã có: đổi tên (s3: // MyBucket/foo/bar, s3: // MyBucket/bar). Làm thế nào để làm việc này trong PHP? Hay dòng đó chỉ hoạt động đúng nguyên văn trên EC2? – Schodemeiss

+0

@AndyBarlow, tôi đã viết một bài về nó trong: http://eyalarubas.com/log/2012/10/16/using-aws-s3-stream-wrapper-for-php/. Liên hệ với tôi nếu bạn có thêm câu hỏi. – EyalAr

Trả lời

4

Vì tôi đã hỏi câu hỏi này khoảng 5 tháng trước, tôi đã có thời gian để có được một số thông tin chi tiết; vì vậy tôi sẽ tự trả lời:

Từ những gì tôi đã thấy, không có sự khác biệt lớn nào về hiệu suất hoạt động. Tôi có thể tưởng tượng rằng việc gọi s3cmd từ bên trong PHP có thể tốn kém, do yêu cầu một quy trình bên ngoài cho mỗi yêu cầu; nhưng sau đó một lần nữa - SDK của Amazon sử dụng cURL để gửi yêu cầu của nó, vì vậy không có nhiều sự khác biệt.

Một sự khác biệt mà tôi đã thông báo, là SDK của Amazon có xu hướng ném ngoại lệ cURL (dường như ngẫu nhiên và hiếm khi), nhưng s3cmd không bị lỗi. Các tập lệnh của tôi chạy trên 10 trong số hàng nghìn tệp, vì vậy tôi phải tìm hiểu cách khắc phục các ngoại lệ cURL này.
Lý thuyết của tôi là cURL bị treo khi có xung đột giao tiếp trên máy chủ (ví dụ: khi hai quy trình cố gắng sử dụng cùng một tài nguyên). Tôi đang làm việc trên một máy chủ phát triển mà đôi khi một số quy trình truy cập S3 với cURL cùng một lúc; đây là những tình huống duy nhất trong đó cURL trưng bày hành vi này.

Đối với kết luận:
Sử dụng s3cmd có thể ổn định hơn, nhưng sử dụng SDK cho phép linh hoạt hơn và hội nhập tốt hơn với bạn PHP mã; miễn là bạn nhớ để xử lý các trường hợp hiếm (tôi muốn nói 1 cho mỗi 1000 yêu cầu, khi một số quy trình chạy đồng thời) trong đó SDK ném một ngoại lệ cURL.

2

Vì một trong hai phương thức, s3cmd và SDK, sẽ phát hành một cách kỳ lạ cùng một cuộc gọi REST, bạn có thể chọn một cách an toàn tùy chọn tốt nhất cho mình.

Khi bạn di chuyển tệp, nếu mục tiêu tồn tại, nó luôn được thay thế, nếu bạn không muốn hành vi này, bạn sẽ cần kiểm tra xem tên tệp đích đã tồn tại chưa, để thực hiện hoặc không phải là hoạt động di chuyển.

+0

Cảm ơn bạn đã nhập. – EyalAr

Các vấn đề liên quan