Esempi di scrittura simultanea - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esempi di scrittura simultanea

I seguenti esempi di pseudo codice dimostrano come, quando vengono eseguite simultaneamente, le transazioni procedono o attendono.

Operazioni simultanee di COPY nella stessa tabella

La transazione 1 copia le righe nella tabella LISTING:

begin; copy listing from ...; end;

La transazione 2 inizia simultaneamente in una sessione separata e prova a copiare più righe nella tabella LISTING. La transazione 2 deve attendere che la transazione 1 rilasci il blocco di scrittura sulla tabella LISTING, quindi può procedere.

begin; [waits] copy listing from ; end;

Lo stesso comportamento si verificherebbe se una o entrambe le transazioni contenessero un comando INSERT anziché un comando COPY.

Operazioni simultanee di DELETE dalla stessa tabella

La transazione 1 elimina le righe da una tabella:

begin; delete from listing where ...; end;

La transazione 2 inizia simultaneamente e prova a eliminare le righe dalla stessa tabella. Avrà esito positivo perché attende il completamento della transazione 1 prima di provare eliminare le righe.

begin [waits] delete from listing where ; end;

Lo stesso comportamento si verificherebbe se una o entrambe le transazioni contenessero un comando UPDATE nella stessa tabella anziché un comando DELETE.

Transazioni simultanee con una combinazione di operazioni di lettura e scrittura

In questo esempio, la transazione 1 elimina le righe dalla tabella USERS, ricarica la tabella, esegue una query su COUNT (*) e quindi ANALYZE prima di eseguire il commit:

begin; delete one row from USERS table; copy ; select count(*) from users; analyze ; end;

Allo stesso tempo, inizia la transazione 2. Questa transazione prova a copiare righe aggiuntive nella tabella USERS, ad analizzare la tabella e quindi a eseguire la stessa query su COUNT (*) come la prima transazione:

begin; [waits] copy users from ...; select count(*) from users; analyze; end;

La seconda transazione avrà esito positivo perché deve attendere il completamento della prima. La sua query su COUNT restituirà il conteggio in base al caricamento che ha completato.