2013-05-01 8 views
10

Si supponga che sto facendo le seguenti operazioni in una transazione:persistente: Come faccio a ottenere l'io in ACID

  • leggere alcuni dati dal database A
  • fare qualche calcolo basato su di esso
  • scrivere alcuni dati B nel database

È possibile eseguire questa transazione fallire se A è cambiato nel frattempo?

In breve: come ottengo l'isolamento nel pacchetto persistente?

risposta

4

Non ho usato io stesso persistent, ma il Yesod book menziona che

Una cosa importante da notare è che tutto ciò che avviene all'interno di una singola chiamata a runSqlConn viene eseguito in una singola transazione. Questo ha due importanti implicazioni:

  • Per molti database, commit di una transazione può essere un'attività costosa. Inserendo più passaggi in una singola transazione , è possibile accelerare notevolmente il codice.

  • Se un'eccezione è gettato in qualsiasi punto all'interno di una singola chiamata a runSqlConn, tutte le azioni saranno eseguito il rollback (supponendo che il back-end ha il supporto di rollback).

Se questo ti dà garanzie di isolamento probabilmente dipende dal fatto che la data di back-end dà garanzie di isolamento per le transazioni.

+0

Sai se esiste un modo per configurare il back-end da persistente? –

Problemi correlati