繁忙系统中保存数量字段的一般指导

时间:2013-06-19 16:15:44

标签: database

假设我有一个传统的销售/库存系统,其库存对象具有数量属性。

如果我使用像NHibernate这样的东西将我的对象的状态持久化回数据库,那么在繁忙的系统中,NHibernate从数据库加载对象并将数量设置为5时就不可能了。可以在系统中收到采购订单并将数量更新为10?

因此,当我的代码从销售该项目中扣除数量时,我可能会将数量设置为4而不是9?

对数据库发出更新是否更安全,无论当前数量是多少,都减去1.

但这似乎不适合对象模型场景。

以前是否有人必须处理此类问题?

由于

1 个答案:

答案 0 :(得分:1)

您需要在事务中包装读写。这正是它们旨在防止的问题,许多ORM暴露了开始和结束交易的能力。

与任何抽象一样,总是存在效率问题。 ORM可能不会生成与UPDATE count = count - 1 FROM products WHERE product.id = 1 AND product.count > 1一样有效且不需要事务的SQL查询。