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