Delphi开发两层的网络版的程序时,架构怎样设计才比较合理?我的做法是。。。。。(100分)

  • 主题发起人 主题发起人 jihe
  • 开始时间 开始时间
J

jihe

Unregistered / Unconfirmed
GUEST, unregistred user!
我在开发两层网络版的程序时,针对局域网用户并发运行时,并没有采用锁表等设置,我只是简单的运用事务处理。
这样做实际上是很简单的处理和不妥当,因为事务操作都是针对大量的数据操作,当操作过程存在其它用户也要操作其中的表时,那么将会出现操作失败。
所以,我想请教大富翁的高手在两层架构中处理多用户并发操作时,应该怎样处理才是最好!
 
为什么没有人回答呢?是因为问题太简单还是太难啊!难道是分太少了,我可以再加的!!!
高手就指点一下把
 
最好不用事务!
将CurorsLocation设成clUseClient
将Locktype设成ltBatchOptimistic
提交的时候检查一下最新的记录.

我在作超市管理系统时,有个连锁店向配送中心要货的功能,就是连锁店,查询到某中货物的
数量就做要货,在确定是在检查此时库存是否小与要货数量,应为有可能在这期间有其他的
连锁店要了同一货物
 
不好意思!有很多的错别字!
 
那么在处理多用户同时并发运行时应该怎样锁表呢?不是还有另外的方法就是自己在操作时要防止别人修改吗
 
那就用一个为了这样而这样的方法,
在表中设一个标记,表示有人在操作,
要访问这个表的时候,就首先坚持这个标记,如果有人,就不能访问(在程序中检测),没有
就可以访问,并修改标记,访问完了就改标记.
 
不好意思,是"检测这个标记"而不是"坚持这个标记"
 
嘿,这样是可以,但是我觉得这样的话那不是要在访问所有表时都要先访问这个标记表吗.
如果对于系统中存在大量的表或者同时要访问几张表时!那不是会拖累了执行效率???
请指教!
 
这种表实际应用中可能不会太多!
否则还有一个我觉得有点要不得的方法了!
就是将标记方到每个表中
 
同时,我想做的系统是多用户操作,而且我也不想给用户在操作时出现一个提示"系统当前有人在使用这个表,请等待..."
因为当出现多用户时,则彼此之间将经常出现这个提示,而是想给用户一个透明的感觉,让用户最终还是能够修改的,那么这样将会出现请求排队的情况,对此,又应该怎样处理呢???
 
>这种表实际应用中可能不会太多!
>否则还有一个我觉得有点要不得的方法了!
>就是将标记方到每个表中

这个方法肯定不好,最好还是用一张表来标记其他表的使用情况!
 
将CurorsLocation设成clUseClient
将Locktype设成ltBatchOptimistic
提交的时候检查一下最新的记录,
想当于让用户在提交的很短的时间占用表
 
明白,谢谢zxbyh的解答.
请大家继续关注,我还想了解有没有其他的方法
 
zxbyh:要是停电或用户非正常关机呢?
是不是大家都要永久等下去呢?

我朋友单位的进存销就是你说的这种方法,经常要叫他以管理员的身份登录去更改那个标志字段,
否则所有用户都必须等待,因为“其它用户正在更改数据”。
 
有毛病可能没有明白我的意思:
管他是否有“其它用户正在更改数据”,都要提交修改,只不过在“其它用户正在更改数据”
的情况下要进行检查。
 
有可能并发更改的表采用timestamp字段,而且在开发中一般使用后锁概念,就是提交时判断此数据是否被更改,
如果更改则提交失败,而不是先把表锁定,所以需要类似timestamp类型字段,你也可以自己加一标志字段来进行
控制,但更新时要保证此字段更新后与原值不一样。
 
zxbyh:以下是你的原话:
那就用一个为了这样而这样的方法,
在表中设一个标记,表示有人在操作,
要访问这个表的时候,就首先坚持这个标记,如果有人,就不能访问(在程序中检测),没有
就可以访问,并修改标记,访问完了就改标记.

要是你把这个标记改为“有人在操作”后,此时非法退出或关机,那么这个标志永久都是
“有人在操作”,那么所有用户都将无休止等待下去。
 

Similar threads

D
回复
0
查看
835
DelphiTeacher的专栏
D
D
回复
0
查看
880
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
617
DelphiTeacher的专栏
D
后退
顶部