постоянный: Как мне получить I в ACID

Предположим, я делаю следующие шаги в транзакции:

  • прочитать некоторые данные A из базы данных
  • сделать некоторые расчеты на его основе
  • записать некоторые данные B в базу данных

Можно ли сделать эту транзакцию неудачной, если A за это время изменилось?

Вкратце: как добиться изоляции в постоянном пакете?


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