假设我们有一个库存系统,可以跟踪商店中的可用产品数量(数量(。所以我们可以有类似的东西:
Id | 名称 | 数量
---|---|
1 | 笔记本电脑 | 10
在阅读了大部分评论之后,让我们假设您需要一个关系数据库的解决方案。
需要保证的主要一点是,只有在前提条件仍然有效(例如product.Quantity - requestedQuantity
(的情况下,代码末尾的写操作才会发生。
此前提条件在内存中的应用程序端进行评估。但当数据库读取发生时,应用程序只看到数据的快照:_database.GetProduct();
一旦其他人更新了相同的数据,这可能就会过时。如果您想避免使用SERIALIZABLE
作为事务隔离级别(这无论如何都会影响性能(,那么应用程序应该在编写时检测前提条件是否仍然有效。或者换一种说法,如果数据在处理过程中没有变化
这可以通过使用离线并发模式来实现:乐观离线锁或悲观离线锁。许多ORM框架默认支持这些功能。