Является ли программная транзакционная память тем же, что и транзакции базы данных?

StackOverflow https://stackoverflow.com/questions/2495671

Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top