2010-11-18 15 views
15

L'articolo di Wikipedia per Distributed transaction non è molto utile.Che cos'è una "transazione distribuita"?

Puoi fornire una descrizione di alto livello di cosa è una transazione distribuita?

Inoltre, è possibile fornire un esempio del motivo per cui un'applicazione o un database devono eseguire una transazione che aggiorna i dati su due o più computer collegati in rete? Capisco il classico esempio di banca; Mi interessa di più delle transazioni distribuite in database su scala Web come Dynamo, Bigtable, HBase o Cassandra.

+0

Capisci cos'è una transazione ("normale")? –

+1

'Ball @Matt:' Yessir! Questa domanda riguarda le transazioni * distribuite *. – Zombie

risposta

10

Le transazioni distribuite si estendono su più sistemi fisici, mentre le transazioni standard no. La sincronizzazione tra i sistemi diventa un'esigenza che tradizionalmente non esisterebbe in una transazione standard.

Dal vostro riferimento Wikipedia ...

... una transazione distribuita può essere visto come una transazione di database che devono essere sincronizzati (o fornire ACID proprietà) tra più banche dati partecipanti che sono distribuiti tra le diverse sedi fisiche ...

+0

+1 per la citazione. Per me ACID è piuttosto una definizione a parte. – Dunaril

4

una transazione distribuita è una transazione che funziona attraverso diversi bozzetto uters. Supponiamo che tu avvii una transazione con un metodo in un programma sul computer A. Poi apporti alcune modifiche ai dati nel metodo sul computer A, e dopo il metodo chiama un servizio web sul computer B. Il metodo di servizio web sul computer B fallisce e ripassa la transazione. Poiché la transazione è distribuita, ciò significa che anche eventuali modifiche apportate al computer A devono essere ripristinate. La combinazione del coordinatore della transazione distribuita su Windows e il framework .net facilitano questa funzionalità.

19

Di solito, le transazioni si verificano su un server di database:

BEGIN TRANSACTION 
SELECT something FROM myTable 
UPDATE something IN myTable 
COMMIT 

Un distribuito transazione coinvolge più server:

BEGIN TRANSACTION 
UPDATE amount = amount - 100 IN bankAccounts WHERE accountNr = 1 
UPDATE amount = amount + 100 IN someRemoteDatabaseAtSomeOtherBank.bankAccounts WHERE accountNr = 2 
COMMIT 

La difficoltà deriva dal fatto che i server devono comunicare a assicurarsi che le proprietà transazionali come l'atomicità siano soddisfatte su entrambi i server: Se il la transazione ha esito positivo, i valori devono essere aggiornati su entrambi i server. Se la transazione non riesce, è necessario eseguire il rollback della transazione su entrambi i server. Non deve mai accadere che i valori siano aggiornati su un server ma non aggiornati sull'altro.

1

Una transazione distribuita è una transazione su un database distribuito (ad esempio, uno in cui i dati sono memorizzati su un numero di sistemi fisicamente separati). È degno di nota perché c'è una buona dose di complessità (specialmente nelle comunicazioni) per assicurare che tutte le macchine restino d'accordo, quindi o l'intera transazione ha successo, oppure sembra che non sia successo nulla.

0

Ho provato a descrivere le transazioni distribuite dettagli in questo post How would you tune Distributed (XA) transaction for performance?

dati buoni per transazione distribuita è un dato che ha molto elevata esigenza di coerenza. Di solito questo è denaro o qualcos'altro che non possiamo mai avere dati obsoleti.Di solito definisco due categorie di dati e dati in tempo reale che non c'è bisogno immediato di correttezza/coerenza.

Ora la seconda parte della domanda su Dynamo, Bigtable, HBase o Cassandra.

Non è possibile disegnare un paralel tra database NOSQL e transazioni distribuite. L'esistenza stessa di questa classe di database è giustificata come mezzo per evitare transazioni distribuite. La transazione distribuita è incentrata sulla coerenza. Questo è piuttosto il contrario con gli archivi NOSQL che sono incentrati su disponibilità e partizionamento.

Il solito modello transazionale utilizzato in tali database è la coerenza finale.

+0

@Mogsdad è meglio ora? –

Problemi correlati