超市里的软件如何解决多台机器同时操作表所导致的并发问题(50分)

  • 主题发起人 主题发起人 wjqhyg
  • 开始时间 开始时间
W

wjqhyg

Unregistered / Unconfirmed
GUEST, unregistred user!
超市里多台POS机,并然会同时访问同一张表的同一个记录,软件设计时如何解决并发问题?<br>说说大家在软件设计方面的心得体会。。。
 
sqlserver, serverprocess都可以。
 
没有关系,只要不更新同一条记录就不必处理并发问题
 
不用你管,并发,锁的问题都几乎是由数据自己管理了。
 
一般超市前台的POS不会直接连接后台的数据库的,你想要是有个POS把表锁住了,其他的POS都不能做销售了,这个超市不是要停止收银啊。一般都会有个本地数据文件的,然后上传交易流水。<br>只要不更新同一条记录就不必处理并发问题?这个不是吧,你要是一个事务不提交,表被锁住了怎么办。
 
楼上讲的也不全对:<br>&nbsp;如果pos没有直接连到后台的数据库,那信息可能会不及时,比如:如果有最新的调价单或商品基本档案,则此时pos肯定取不到最新资料,除非你再做个定时取资料,那反而会消耗pos机的系统资源;<br>本地数据库一般是做备用的,比如:网络故障或服务器故障等等。<br>数据库的并发问题不必用户去考虑,服务器或数据库会自动处理的。除非发生“死锁”。
 
用事务就可以解决
 
啟用事務,必須是在最後提交的那一刻啟用和提交
 
对于大中型的超市,前台大部分有自己本地的数据文件,然后会跟后台做通讯进行数据交换的。你想要是后台意外宕机了或数据库意外,前台难道不要收银了吗?<br>&nbsp; &nbsp; 不过对于那些销售量不是很大的专卖店什么的,倒是可以直接连后台,但对于那些大卖场、超市肯定要有本地数据文件或数据库的。<br>&nbsp; &nbsp; 商场的调价一般都会在前一天做好的,更改标签, 很少有实时做调价实时下传的。<br>&nbsp; &nbsp; 数据库的并发问题不必用户去考虑,服务器或数据库会自动处理的。除非发生“死锁”。 &nbsp;这个说的太勉强了,并发问题对于任何数据库程序都要考虑的,除非你不更新数据和使用事务。
 
各说各的,有实际设计经验的说说。<br>但真要遇到数据库OVER了,收银当然还要进行,所以前台有数据文件是肯定的!<br>继续。。。。。
 
告诉你一个非产好的方法:<br>&nbsp;在数据库的表中加一个ver字段: 用以表示本次操作的“版本”<br>如果update的时候 发现本次更新的ver不是先前查的ver,那就提示不能更新,<br>更新成功后inc(ver)
 
楼上的,谢谢,你的方法比较精妙。<br>数据库如遇问题是有异常产生的,我们处理异常并加事务不就完事了么,难道我这种设计会出问题? &nbsp; &nbsp;<br>请大家针对我这种设计谈谈看法。。。
 
如果是sqlserver数据库,里面有个时间戳的字段,每一次更新的时候时间戳都会改变。<br>不要在事务中使用select查询语句,防止锁表,不要在try except 中进行事务回滚之前执行可以触发异常的语句。
 
sqlserver数据库,在update 时加 with (rowlock)可以行锁定,这样保证这条记录只有一个人操作
 
数据库如遇问题是有异常产生的,我们处理异常并加事务不就完事了么,难道我这种设计会出问题? &nbsp; &nbsp;<br>请大家针对我这种设计谈谈看法。。。
 
怎么没人回答,难道很简单么
 
我们楼下有个超市,应该还是比较大的超市了。<br>买东西时,经常是买的时候划价,比如买肉,米这些散装的东西。<br>所以说应该是直连数据库。<br>不过应该有其它措施来应对后台数据库发生问题的情况。可以存在本地,然后上传的那种。
 
商业机密,不过可以给点提示给你.<br><br>一般前台都有断网销售功能(必须)<br><br>下载基本资料<br>每个前台一个id ,销售数据按此id编写 key ,eg : 01 2008 06 01 00001 (机器id,日期,本机自己编的sn)<br><br>定时上传,网络不通则保存本地<br><br>下班每机检查自己是否有没有上传的,把网搞通,上传,<br><br>扎帐(就是统一计算上帐)<br><br>不做实时上帐<br><br>不存在并发问题(避免了)<br><br>分全部该给我
 
真够费劲的了,找个超市的女朋友问问操作过程什么都知道了,有谁可以介绍个不?呵呵。。。
 

Similar threads

后退
顶部