Domanda

Ho letto molto su Software Transactional Memory, soprattutto in relazione alla Haskell ma sto cercando di capire come sia diverso da transazioni di database? Ci sono alcuni vantaggi che non capisco con STM?

È stato utile?

Soluzione

L'idea di una "transazione" nel software di memoria transazionale è esplicitamente preso in prestito da banche dati. La differenza è dove le operazioni sono attuate e come essi vengono utilizzati.

STM è un concetto a livello di lingua: una sequenza di operazioni non ha effetto fino a quando una transazione è impegnata. In genere questo significa che i valori di alcune variabili globali condivise / cambiano solo quando una transazione ha successo. La proprietà è applicata dal Language Runtime. Non v'è alcuna nozione intrinseca della persistenza:. Le variabili coinvolte in una transazione possono essere puramente di natura dinamica (ad esempio, la dimensione di una coda di lavoro)

transazioni di database sono un concetto a livello di applicazione: una sequenza di operazioni sui dati non ha effetto fino al commit della transazione. Poiché si tratta di una banca dati, la persistenza è fondamentale:. Il significato di "entrata in vigore" all'interno di una banca dati è che i dati vengono salvati in qualche archivio permanente

Si potrebbe utilizzare un database e database transazioni per implementare un algoritmo STM-stile, ma che ci si perde la facilità e la convenienza (e, probabilmente, nella maggior parte dei casi, le prestazioni) di un'implementazione a livello di lingua.

Altri suggerimenti

Una transazione STM ha molto in comune con una transazione di database . In particolare, le proprietà ACID importanti da progettisti di database, STM offre Atomicity e isolanti. Coerenza, tuttavia, spetta al programmatore è possibile scrivere le transazioni STM che violano le invarianti di strutture dati interne, per esempio. Infine, le operazioni STM in genere non sono durevoli; risultati vengono memorizzati nella RAM volatile, e se la macchina si blocca dopo un'operazione di successo, i risultati possono essere persi. Questo, nella mia mente, è probabilmente la differenza più saliente tra una transazione STM e una transazione di database.

STM è usato soprattutto per la concorrenza, mentre le transazioni di database sono circa la coerenza dei dati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top