我正在考虑通过以下方式在 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/