2013-02-24 14 views
39

Amazon supporta i caricamenti batch di s3? Ho un lavoro che deve caricare ogni notte ~ 100K di file che possono essere fino a 1G ma è fortemente inclinato verso file di piccole dimensioni (il 90% è inferiore a 100 byte e il 99% è inferiore a 1000 byte).È possibile eseguire un caricamento di gruppo su Amazon s3?

L'API s3 supporta il caricamento di più oggetti in una singola chiamata HTTP?

Tutti gli oggetti devono essere disponibili in S3 come singoli oggetti. Non posso ospitarli da nessun'altra parte (FTP, ecc.) O in un altro formato (database, unità locale EC2, ecc.). Questo è un requisito esterno che non posso cambiare.

+2

grande domanda! appena fuori la curiosità puoi dirci perché, cosa stai cercando di fare, quali sono questi file? –

+0

va bene per me porre queste domande? –

+0

Mi chiedo perché appare questo requisito. Se è necessario sostituire tutti i file contemporaneamente, forse c'è un modo per caricarli nel bucket temporaneo in modo regolare e quindi modificare i nomi dei bucket? –

risposta

23

L'API s3 supporta il caricamento di più oggetti in una singola chiamata HTTP?

No, the S3 PUT operation supporta solo il caricamento di un oggetto per ogni richiesta HTTP.

Si potrebbe installare S3 Tools sulla vostra macchina che si desidera sincronizzare con il secchio a distanza, ed eseguire il seguente comando:

s3cmd sync localdirectory s3://bucket/ 

allora si potrebbe inserire questo comando in uno script e creare un processo pianificato per l'esecuzione questo comando ogni notte.

Questo dovrebbe fare quello che vuoi.

Lo strumento esegue la sincronizzazione dei file in base agli hash MD5 e alla dimensione dei file, pertanto la collisione deve essere rara (se davvero si desidera utilizzare il comando "s3cmd put" per forzare la sovrascrittura degli oggetti nel bucket di destinazione).

EDIT: Assicurarsi inoltre di leggere la documentazione sul sito che ho linkato per S3 Strumenti - ci sono diverse bandiere necessari per se si desidera che i file eliminati a livello locale per essere cancellati dal secchio o ignorati ecc

+7

Questo metodo utilizza ancora singole operazioni put e non è intrinsecamente più veloce di qualsiasi altra cosa. La risposta è stata accettata ma sembra che tutto quello che hai fatto sia puntare su uno strumento che faccia la stessa cosa che potrebbe fare nel codice. – bridiver

+0

si potrebbe fare una sincronizzazione dal nodo di api anche - Vai nodo s3-client –

+0

s3cmd richiede una licenza per l'uso continuato – Adder

28

alternativa , puoi caricare S3 tramite AWS CLI tool usando il comando sync.

AWS s3 sincronizzazione local_folder S3: // secchio nome

È possibile utilizzare questo metodo per caricare file batch per S3 molto veloce.

+6

come con la risposta precedente, l'implicazione qui sembra essere che questi strumenti sono in qualche modo facendo qualcosa che non può altrimenti essere realizzato con l'API e non credo che sia il caso – bridiver

+0

attualmente sto usando lo strumento AWS CLI sincronizzare tra una directory locale e un secchio S3. Mi piacerebbe sapere se esiste un argomento o un parametro che può essere utilizzato per l'uscita del "upload" o la sincronizzazione risultati in un file TXT locale che posso quindi e-mail a qualcuno via Blat. Tutto questo è da mettere in un file batch per una sincronizzazione programmata di migliaia di file che devono essere scaricati dai nostri altri server. (Usando S3 secchio come fonte cloud per superare i problemi di velocità di upload del nostro server di origine) –

0

Un file (o una parte di un file) = una richiesta HTTP, ma l'API Java supporta ora efficiente caricare più file senza dover scrivere il multithreading da soli, utilizzando TransferManager

Problemi correlati