2012-02-09 43 views
5

Tôi cần phải sao chép tất cả các phím từ '/ old/dir /' sang '/ new/dir /' trong một thùng amazon S3. tôi đã đưa ra kịch bản này (nhanh hack):Làm thế nào để sao chép hiệu quả tất cả các tệp từ một thư mục này sang thư mục khác trong thùng chứa aazon S3 bằng boto?

import boto 

s3 = boto.connect_s3() 
thebucket = s3.get_bucket("bucketname") 
keys = thebucket.list('/old/dir') 
for k in keys: 
    newkeyname = '/new/dir' + k.name.partition('/old/dir')[2] 
    print 'new key name:', newkeyname 
    thebucket.copy_key(newkeyname, k.bucket.name, k.name) 

Đối với bây giờ nó đang làm việc nhưng là chậm hơn nhiều so với những gì tôi có thể làm bằng tay trong managment đồ họa giao diện điều khiển bởi chỉ cần sao chép/quá khứ với chuột. Rất bực bội và có rất nhiều chìa khóa để sao chép ...

Bạn có biết phương pháp nào nhanh hơn không? Cảm ơn.

Chỉnh sửa: có thể tôi có thể thực hiện việc này với các quy trình sao chép đồng thời. Tôi không thực sự quen thuộc với các phương pháp boto copy keys và có bao nhiêu tiến trình đồng thời tôi có thể gửi đến amazon.

Chỉnh sửa2: Tôi hiện đang học đa xử lý Python. Hãy xem liệu tôi có thể gửi 50 thao tác sao chép cùng lúc không ...

Chỉnh sửa 3: Tôi đã thử với 30 bản sao đồng thời bằng cách sử dụng mô-đun đa xử lý Python. Sao chép nhanh hơn nhiều so với giao diện điều khiển và ít bị lỗi hơn. Có một vấn đề mới với các tệp lớn (> 5Gb): boto đặt ra một ngoại lệ. Tôi cần phải gỡ lỗi này trước khi gửi kịch bản cập nhật.

+0

Bạn đã thử REST-sao chép một đối tượng (http://docs.amazonwebservices.com/AmazonS3/latest/API/ RESTObjectCOPY.html? R = 7426)? Tôi sẽ thử nó, có lẽ nó nhanh hơn ... – Viccari

+0

Tôi hy vọng boto đang gọi API này, nhưng tôi đã không kiểm tra – ascobol

+1

Vì vậy, tôi :) Nhưng tôi đã học được cách cứng nó không làm tổn thương kiểm tra ... – Viccari

Trả lời

1

Về vấn đề của bạn với tệp trên 5 GB: S3 không hỗ trợ tải lên tệp trên 5 GB bằng phương pháp PUT, đó là những gì boto cố gắng làm (see boto source, Amazon S3 documentation).

Rất tiếc, tôi không chắc chắn cách bạn có thể giải quyết vấn đề này, ngoài việc tải xuống và tải lên lại trong quá trình tải lên nhiều phần. Tôi không nghĩ rằng boto hỗ trợ hoạt động sao chép nhiều phần (nếu có một điều như vậy tồn tại)

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