微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

delphi – 并发控制

你好
我想知道在3层应用程序中实现并发控制的最佳方法吗?
可能首先想到的是:

>客户端想要编辑数据集中的记录.
>向服务器发送请求,要求锁定该记录
>服务器根据锁定表接受/拒绝编辑请求

根据这种情况,锁应该引用锁定的记录和使用该记录的客户端.
客户端必须定期向服务器发送保持活动消息.保持活动用于释放锁定的记录,以防我们在编辑操作的混乱中丢失客户端.

我将使用Delphi和datasnap.也许这是一个新手问题,但我不得不问!

解决方法

我正在建立在jachguate的 Optimistic Concurrency Control答案上,以回答评论中提出的问题.

我更喜欢在任何地方使用OCC,因为实现更容易.我将讨论使用object persistence framework的三层应用程序.我的推荐方案有三个级别:

>行或对象级别控件,其中每个对象上存储唯一的版本ID.如果您尝试更新对象,则会自动更改版本ID.如果您的版本ID与已存在的版本ID不匹配,则更新失败.
>字段或列级锁定.您发送原始对象的完整副本以及更新的副本.更新中的每个字段都会在应用新值之前比较实际值和旧值.可以要求用户解决冲突而不是丢弃冲突,但随着提交中的数据量的增加,这会变得混乱.
>悲观锁定.每个对象都有一个锁所有者,通常为null(对象未锁定).如果要编辑对象,请先锁定它.这里的问题是需要整理锁定,并且围绕它的业务规则可能是丑陋的(需要什么时候超时).

这样做的好处是大多数时候都采用低成本的OCC路径.对于发生很多但争用率低的事情而言,好处是显着的.想想仓库中的产品跟踪 – 产品一直在移动,但很少同时移动相同的物品,并且当它们解决时很容易(剩余数量=原始数量减去我的移除和移除).对于(例如)产品重新定位的复杂情况,在产品运输过程中锁定产品可能是有意义的(因为这反映了物理情况).

当您必须回退到锁定时,能够通知两个用户并拥有通信通道通常很有用.至少在可用时通知想要锁的用户,最好允许他们向锁持有人发送消息,甚至允许他们强制锁定.然后通知失败者“Jo Smith已经锁定你,你失去了你的变化”.让办公室政治排序那个:)

我通常会通过用户投诉而不是错误报告来推动后备流程.如果用户抱怨他们在特定流程中经常丢失编辑内容,请进行更改.如果用户抱怨记录过于频繁地被锁定,则必须重构对象映射以增加锁粒度或更改业务流程.

原文地址:https://www.jb51.cc/delphi/101814.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐