Я считал много о программном обеспечении Транзакционную Память, особенно относительно Haskell, но я пытаюсь изобразить, как это отличается от транзакций базы данных? Есть ли некоторые преимущества, которые я не понимаю с STM?
Идея «транзакции» в программной транзакционной памяти явно заимствована из баз данных. Разница в том, где реализуются транзакции и как они используются.
STM - это концепция уровня языка: последовательность операций не вступает в силу до тех пор, пока транзакция не будет зафиксирована. Обычно это означает, что значения некоторых глобальных / общих переменных изменяются только при успешном завершении транзакции. Свойство обеспечивается языковой средой выполнения. Не существует неотъемлемого понятия постоянства: переменные, участвующие в транзакции, могут быть чисто динамическими по своей природе (например, размер рабочей очереди).
Транзакции базы данных являются концепцией уровня приложения: последовательность операций с данными не вступает в силу до тех пор, пока транзакция не будет зафиксирована. Поскольку это база данных, постоянство имеет фундаментальное значение: смысл «вступления в силу» внутри базы данных заключается в том, что данные сохраняются в некотором постоянном хранилище.
Вы потенциально можете использовать базу данных и транзакции базы данных для реализации алгоритма в стиле STM, но вы потеряете легкость и удобство (и, вероятно, в большинстве случаев производительность) реализации на уровне языка.
Транзакция STM имеет много общего с транзакцией базы данных . В частности, из свойств ACID, важных для разработчиков баз данных, STM обеспечивает атомарность и изоляцию. Однако согласованность зависит от программиста - например, вы можете писать транзакции STM, которые нарушают инварианты внутренних структур данных. Наконец, транзакции STM обычно не являются долговременными; результаты хранятся в энергозависимой оперативной памяти, и если машина выйдет из строя после успешной транзакции, результаты могут быть потеряны. На мой взгляд, это, вероятно, наиболее существенное различие между транзакцией STM и транзакцией базы данных.
STM в основном используется для параллелизма, в то время как транзакции базы данных связаны с согласованностью данных.