постоянен: Как да получа I в ACID

Да предположим, че правя следните стъпки в транзакция:

  • прочетете някои данни A от базата данни
  • направете някакво изчисление въз основа на него
  • запишете някои данни B в базата данни

Възможно ли е тази транзакция да се провали, ако А се е променило междувременно?

Накратко: Как да постигна изолация в постоянния пакет?


person Tobias Brandt    schedule 01.05.2013    source източник


Отговори (1)


Самият аз не съм използвал persistent, но в книгата на Yesod се споменава, че

Едно важно нещо, което трябва да се отбележи, е, че всичко, което се случва в едно извикване на runSqlConn, се изпълнява в една транзакция. Това има две важни последици:

  • За много бази данни извършването на транзакция може да бъде скъпа дейност. Като поставите няколко стъпки в една транзакция, можете драстично да ускорите кода.

  • Ако някъде в едно извикване на runSqlConn бъде хвърлено изключение, всички действия ще бъдат отменени (при положение, че вашият бекенд има поддръжка за връщане).

Дали това ви дава гаранции за изолация вероятно зависи от това дали дадения бекенд дава гаранции за изолация за транзакции.

person shang    schedule 02.05.2013
comment
Знаете ли дали има начин да конфигурирате задния край от постоянен? - person Tobias Brandt; 02.05.2013