database - 长期交易是否可以接受?

标签 database language-agnostic transactions data-access-layer

我正在考虑通过以下方式在 2 层 WPF(或 Windows 窗体)应用程序中使用事务:

当我们打开用于编辑数据的新表单时,我们可以开始新的事务,在此事务中透明地编辑和保存更改。然后我们可以单击“确定”按钮并提交事务,或单击“取消”按钮并回滚它。如果我们想用这些数据打开另一个对话窗口,我们可以使用嵌套事务。

问题是:这种使用交易的方式是否可以接受?我知道有很多不同的方法可以实现这种逻辑,但我想列出这个方法的优缺点。

最佳答案

长期交易是学术界热议的话题……我想说是在 1980 年代。问题在于,长期存在的事务几乎肯定会在悲观执行中造成死锁,并且几乎肯定会在乐观执行中需要复杂的冲突解决(有关数字,您可以引用 Jim Gray's paper "The Dangers of Replication and a Solution" ,但很快死锁就会上升为事务的第五次幂大小,并且碰撞的概率作为二次方上升)。

现在对这个问题有不同的建议,比如 "sagas"来自 Salem 和 Garcia-Molina,“嵌套事务”等等(another Jim Gray's paper "The Transaction Concept: Virtues and Limitations" 最后有几页关于它)。大多数提案涉及事务模型,比 ACID 弱。例如,“长事务”可能不得不公开它们的中间结果,这违反了隔离属性。但可以说,没有一项提案真正进入了行业。主要是因为这些技术并不是真正的...简化,也不是解决实际业务问题所必需的。

因此,回答您的问题:不,主流数据库引擎不欢迎长期事务。

关于database - 长期交易是否可以接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1968437/

相关文章:

sql - 如何通过对单个表的多个引用获取数据

language-agnostic - 不递归地循环遍历文件夹

algorithm - 区间(图论)算法讲解

mysql - 如何选择所有项目完成的所有订单?

php - 如何防止弄错ID

web-services - 测试公共(public) Web 服务的客户端

entity-framework - Entity Framework : Using transactions and rollbacks. .. 可能吗?

mysql - 想要在以下程序中应用交易,但它不起作用

php - 记录在 PDO mssql 事务循环中消失

mysql - 如何描述sql表中的对象?