5

Questa può sembrare una domanda molto semplice, ma se sto scaricando un file da S3 mentre viene aggiornato da un altro processo, devo preoccuparmi di ottenere un file incompleto?download da AWS S3 mentre il file viene aggiornato

Esempio: un file CSV da 200 MB. L'utente A inizia ad aggiornare il file con 200 MB di nuovi contenuti a 1 Mbps. 16 secondi dopo, l'utente B inizia a scaricare il file a 200 Mbps. L'utente B ottiene tutti i 200 MB del file originale o l'utente B riceve ~ 2 MB di modifiche all'utente A e nient'altro?

risposta

9

L'utente B riceve tutti i 200 MB del file originale.

Ecco perché:

PUT operazioni su S3 sono atomiche. Non c'è tecnicamente alcuna cosa come "modificare" un oggetto. Ciò che accade effettivamente quando un oggetto viene sovrascritto è che l'oggetto è sostituito con un altro oggetto con la stessa chiave. Ma l'oggetto originale non viene effettivamente sostituito fino a quando il nuovo oggetto (sovrascrittura) non viene caricato nella sua interezza, e con successo ... e anche allora, l'oggetto sovrascritto non è ancora tecnicamente "andato" - è stato solo sostituito nell'indice del bucket , in modo che le richieste future saranno servite al nuovo oggetto.

(Servire il nuovo oggetto è in realtà documentata da non essere garantito per accadere sempre immediatamente. In contrasto con i caricamenti di nuovi oggetti, che sono immediatamente disponibili per il download, sovrascrive di oggetti esistenti sono finalmente coerenti, il che significa che è possibile - comunque improbabile - che per un breve periodo di tempo dopo aver caricato un oggetto, la vecchia copia potesse ancora essere pubblicata per le richieste successive).

Ma quando si sovrascrive un oggetto e la versione non è abilitata nel bucket, il vecchio oggetto e i nuovi oggetti vengono effettivamente memorizzati indipendentemente in S3, nonostante la stessa chiave. Il vecchio oggetto non è più referenziato dall'indice del bucket, quindi non è più addebitato per la sua archiviazione, e sarà presto eliminato dal backing store di S3. Non è in realtà documentato quanto più avanti succederà ... ma (tl; dr) sovrascrivere un oggetto che viene attualmente scaricato non dovrebbe causare effetti collaterali imprevisti.

Gli aggiornamenti di una singola chiave sono atomici. Ad esempio, se si esegue il PUT su una chiave esistente, una lettura successiva potrebbe restituire i vecchi dati oi dati aggiornati, ma non scriverà mai dati corrotti o parziali.

http://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel

+0

Potrebbe fare riferimento a una fonte? – PhilT

+2

@PhilT completato. Se una lettura "successiva" potrebbe restituire l'oggetto nuovo o vecchio, è possibile dedurre che un download in corso continui a restituire il vecchio oggetto. Quando si "sovrascrive" un oggetto, viene sovrascritto solo il record dell'indice che consente al front-end di S3 di recuperare l'oggetto dalla memoria. Il nuovo oggetto viene scritto separatamente, l'indice viene aggiornato e quindi il vecchio oggetto viene eliminato (a meno che non sia abilitato il controllo delle versioni di bucket, nel qual caso viene mantenuto anche). Le sovrascritture sono quindi logiche, piuttosto che fisiche, e brevi ritardi di replica nell'indice sono la causa della coerenza finale. –

+0

Perfetto! Grazie. – PhilT

Problemi correlati