【问题标题】:DBMS: concurrency control AKA the cup of cofee principleDBMS:并发控制又名咖啡杯原理
【发布时间】:2011-07-12 08:57:17
【问题描述】:

在法语中,我们将并发控制问题称为一杯咖啡原理。英文应该是一样的吧?

这是原则。让我们想象一个医院管理系统。医生使用应用程序显示患者并对其进行修改。在点击“更新”之前,他离开去喝杯咖啡。另一位医生在他的客户端应用程序上显示同一位患者并单击“更新”。当第一位医生回来时,他点击了“更新”。问题是:必须接受哪个更新?事实上,这是一个反问:由开发人员/架构师来回答。

我正在考虑的一个解决方案是在我的表格中添加一列“locked”。当我让 Patient 进行更新时,我将布尔值设置为 true,并在我刚刚更新它时将其设置为 false。任何“Get for update”都会检查“locked”是否设置为 false 以允许写入。

您发现使用此解决方案有什么问题吗?

【问题讨论】:

    标签: database concurrency


    【解决方案1】:

    在法语中,我们将并发控制问题称为杯 咖啡原理。英文应该也一样吧?

    我从没听说过它用英语这么叫,但我明白你的意思。以英语为第一语言的数据库开发人员可能你解释它之前不明白你的意思,但他们应该你解释它之后。

    所有现代数据库都实现事务;正确使用事务将保证您想要的数据库行为。

    “锁定”列不是必需的。如果您在事务中维护其状态,则对其状态的更改将不会对其他事务可见。如果您在事务之外维护其状态,则可能会冒其值与实际(dbms 发布和维护的)锁不一致的风险。

    【讨论】:

    • 我同意尽可能多地将并发控制委托给数据库。但是在一个小时内保持交易,因为医生离开去喝咖啡是不可接受的。这就是我寻找“轻量”锁定系统的原因。因此,“locked”病人可以从任何地方读取,但只能由一个人写入。如果医生离开一小时,患者将无法编辑,但将其视为要求。
    • “但是因为医生离开去喝咖啡是不可接受的,所以在一小时内保持交易。”我同意。但是,在医生睡觉时在一夜之间“锁定”一排同样是不可接受的。一个好的用户界面程序员会在可能的最晚时刻开始事务,并在可能的最早时刻提交它们。真正的问题不在于现代 dbms 锁定过于粗糙和重量级;真正的问题是您的用户界面程序员将您的应用程序视为单用户应用程序,并且他在错误的时间开始事务。
    猜你喜欢
    • 2012-02-19
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 2013-06-10
    • 2013-01-09
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    相关资源
    最近更新 更多