[英]Integrity and Confidentiality in Distributed Transactions
我有一个关于分布式交易的问题。 假设我有3个交易程序:
交易A
交易B
交易C
因此,共有5对关键操作:C2-A5,A2-B4,B4-C4,B2-C4,A2-C4。
我应该确保完整性和机密性 ,您对如何实现它有任何想法吗?
先感谢您!
您在帖子中所描述的是多用户系统中的常见情况。 不同的会话使用相同的表和相同的行同时启动事务。 这里有两个问题:
(您的情况仅说明了其中的第一个问题)。
第一个问题的答案是iosation级别。 这是跨会话的未提交事务的可见性的定义。 ANSI标准指定了四个级别 :
不同的口味或数据库以不同的方式实现这些功能,并且并非所有数据库都支持它们。 例如,Oracle仅支持READ COMMITTED和SERIALIZABLE,并且将SERIALIZABLE实现为snapsot(即,它是只读事务)。 但是,它使用多版本并发控制来防止READ COMMITTED事务中的不可重复读取。
因此,回到您的问题,答案是:设置适当的隔离级别。 合适的级别取决于数据库支持的级别以及希望发生的行为。 可能您希望读取已提交或可序列化,也就是说,您希望基于与事务开始一致的数据值继续进行事务。
至于另一件事,答案很简单:事务必须在开始更新表之前对表或最好仅对必需的行发出锁。 这样可以确保事务可以继续更改这些值而不会导致死锁。 这称为悲观锁定。 在使用连接池的应用程序(即大多数基于Web的应用程序)中是不可能的,而且这种情况更加棘手。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.