Является ли программная транзакционная память такой же, как транзакции базы данных? - PullRequest
6 голосов
/ 22 марта 2010

Я много читал о программной транзакционной памяти, особенно в отношении Haskell, но я пытаюсь понять, чем она отличается от транзакций базы данных? Есть ли какие-то преимущества, которые я не понимаю в STM?

Ответы [ 3 ]

5 голосов
/ 23 марта 2010

Идея «транзакции» в программной транзакционной памяти явно заимствована из баз данных. Разница в том, где осуществляются транзакции и как они используются.

STM - это концепция уровня языка: последовательность операций не вступает в силу, пока транзакция не будет зафиксирована. Обычно это означает, что значения некоторых глобальных / общих переменных изменяются только при успешном выполнении транзакции. Свойство обеспечивается языковой средой выполнения. Не существует понятия постоянства: переменные, участвующие в транзакции, могут иметь чисто динамический характер (например, размер рабочей очереди).

Транзакции базы данных - это концепция уровня приложения: последовательность операций с данными не вступает в силу, пока транзакция не будет зафиксирована. Поскольку это база данных, постоянство является основополагающим: значение «вступления в силу» внутри базы данных заключается в том, что данные сохраняются в каком-то постоянном хранилище.

Вы можете потенциально использовать базу данных и транзакции базы данных для реализации алгоритма в стиле STM, но вы потеряете простоту и удобство (и, вероятно, в большинстве случаев производительность) реализации на уровне языка.

4 голосов
/ 23 марта 2010

Транзакция STM имеет много общего с транзакцией базы данных . В частности, из свойств ACID, важных для разработчиков баз данных, STM обеспечивает атомарность и изоляцию. Согласованность, однако, зависит от программиста - вы можете писать транзакции STM, которые, например, нарушают инварианты внутренних структур данных. Наконец, транзакции STM обычно не являются долговременными; результаты сохраняются в энергозависимой оперативной памяти, и в случае сбоя компьютера после успешной транзакции результаты могут быть потеряны. На мой взгляд, это, вероятно, самое существенное различие между транзакцией STM и транзакцией базы данных.

1 голос
/ 23 марта 2010

STM в основном используется для параллелизма, в то время как транзакции базы данных касаются согласованности данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...