2013-05-01 12 views
10

Załóżmy robię następujące czynności w ramach transakcji:trwałe: Jak mogę dostać I w kwasie

  • czytać A niektóre dane z bazy
  • zrobić kilka kalkulacja opiera się na nim
  • napisz trochę danych B do bazy danych

Czy jest możliwe, aby ta transakcja się nie udała, jeśli A uległo zmianie w międzyczasie?

W skrócie: Jak uzyskać izolację w trwałym opakowaniu?

Odpowiedz

4

Nie używałem persistent siebie, ale Yesod book wspomina, że ​​

Jedną ważną rzeczą jest, aby pamiętać, że wszystko, co zachodzi wewnątrz pojedynczym wywołaniu runSqlConn działa w jednej transakcji. Ma to dwie ważne konsekwencje:

  • Dla wielu baz danych, zobowiązując transakcję może być kosztowna działalność. Dzięki wprowadzeniu wielu kroków w pojedynczej transakcji można znacznie przyspieszyć kod.

  • Jeśli wyjątek jest rzucone gdziekolwiek wewnątrz jednego połączenia do runSqlConn, wszystkie działania będą zostać wycofana (zakładając swój backend ma wycofywania wsparcia).

czy to daje gwarancje izolacji prawdopodobnie zależy od tego, czy dana back-end daje gwarancje izolacji transakcji.

+0

Czy wiesz, czy istnieje sposób skonfigurowania zaplecza z trwałego? –