.net平台中数据可以离线操作,那它是如何样做到数据的正确性的呢
.net平台中数据可以离线操作,那它是怎么样做到数据的正确性的呢
.net平台中数据可以离线操作,那它是怎么样做到数据的正确性的呢?
比如,某超市,甲乙两人,都是在离线的数据库操作A商品,离线数据库记录A商品数量为100个,甲进货100个的同时,乙出货50个,前者离线数据库中的A商品数量为200,而后者离线数据库中A商品的数量为50,
如果,甲先联网更新了A商品的数量为200,而后乙再联网更新A类商品的数量为50,那岂不是产生了错误。
不知道,我的问题对不对,有没有意义,请大家帮忙指导一下。
谢谢大家!
------解决方案--------------------
增加100记为加100,出货50记为减50,而不是你说的直接修改;就相当于有一个操作记录表,记录操作的数据一样。
------解决方案--------------------
联网后,要重新检测库存,否则肯定出错
------解决方案--------------------
我觉得有一个xml或者日志之类的东西去保存离线时,用户的操作。
联网时在进行队列处理,再给用户反馈信息。
没做过相关的,只是个人凭空想象。
------解决方案--------------------
不知道.net平台的哪种东西可以实现你问题中的“做到数据的正确性”,如果你知道,请告诉我用了哪种方式。
我只谈谈我碰到过的情况,同样用你的例子:
比如,某超市,甲乙两人,都是在离线的数据库操作A商品,离线数据库记录A商品数量为100个,甲进货100个的同时,乙出货50个,前者离线数据库中的A商品数量为200,而后者离线数据库中A商品的数量为50,
如果,甲先联网更新了A商品的数量为200
好,关键点就在这里了。这个200是要在程序中由程序员编程实现的。假设:
X1=当前的离线数据库中A商品数量
X2=与在线数据库断开连接时候的A商品数量
X3=当前在线数据库中的A商品数量。
那么更新后的数量为:
X3=X1-X2+X3
代入值后也就是
200-100+100。
这个算式的结果也就是在线数据库中的结果是200没错。现在X3=200了。
轮到乙了。同样的计算方式,这个时候代入以后的算式是·50-100+200。最终结果为150。
------解决方案--------------------
不管你是离线改,还是在线改,也没有直接去改库存的.
库存应该分进货出货
最后一SUM就是库存,而不是有个字段记录剩多少
------解决方案--------------------
还有多用户同时操作数据库,应该用数据库中的事务
先查询剩余,然后操作,放到同一个过程里
否则所有逻辑都在客户端做,查询剩余和插入记录之间的这点时间,就有可能有新纪录诞生,于是一定会不定期出现数据错乱
------解决方案--------------------
大一点的零售系统都是定期将POS服务器(可能服务着500台前端POS机)上把数据库下载到财务服务器,然后才进行库存过账。例如每天凌晨开始过账。
------解决方案--------------------
真正见识过一些大系统你会发现,真正的智慧总是显得很朴素的。那些显得稍微花哨的技术化的东西,往往反而是比较蠢得。
------解决方案--------------------
另外,有经验的人制作的零售系统,它是分门别类(根据几十种不同的账簿)地再有日账、月账汇总账簿的。也就是说每天有日结动作,每月有月结动作。不是像那些只会做个小OA程序的人那样只知道弄个“流水账”和“余额账”的。
也就是说,任何一个好的业务处理系统,都应该脱离了那些编程人员的限制,真正在你的系统结构中与业务专家的设计水平完全一致,才行。这样的系统中我们很少看到有什么程序员会跟用户顶牛的,因为程序员没有借口不去实现复杂的业务。
------解决方案--------------------
从逻辑上,没有办法满足你的要求,如果要保证系统可用性,那么必须在线。
如果可以牺牲可用性,你可以制定一个乐观或者悲观的锁策略(区别乐观和悲观的是,你愿意接受宁可有库存但是不发货,还是即便万一没有库存,也要发货,我们以前者为例:)
你需要做的是,首先假设预分配货物给某个门店,此时给记录加上一个标记(锁),然后此时别的客户端只能增加库存,不能发货。除非门店交还预分配的货物,解除锁定,此时另一个门店才可以加锁。
------解决方案--------------------
弱弱地问一下:
如果离线数据库中A商品数量是 100,然后甲出货 99,乙出货99,丙出货99,丁出货 99。
联网的时候打算怎么办?

------解决方案--------------------
哈哈,让物流赶紧进货,弥补亏空
.net平台中数据可以离线操作,那它是怎么样做到数据的正确性的呢?
比如,某超市,甲乙两人,都是在离线的数据库操作A商品,离线数据库记录A商品数量为100个,甲进货100个的同时,乙出货50个,前者离线数据库中的A商品数量为200,而后者离线数据库中A商品的数量为50,
如果,甲先联网更新了A商品的数量为200,而后乙再联网更新A类商品的数量为50,那岂不是产生了错误。
不知道,我的问题对不对,有没有意义,请大家帮忙指导一下。
谢谢大家!
------解决方案--------------------
增加100记为加100,出货50记为减50,而不是你说的直接修改;就相当于有一个操作记录表,记录操作的数据一样。
------解决方案--------------------
联网后,要重新检测库存,否则肯定出错
------解决方案--------------------
我觉得有一个xml或者日志之类的东西去保存离线时,用户的操作。
联网时在进行队列处理,再给用户反馈信息。
没做过相关的,只是个人凭空想象。
------解决方案--------------------
不知道.net平台的哪种东西可以实现你问题中的“做到数据的正确性”,如果你知道,请告诉我用了哪种方式。
我只谈谈我碰到过的情况,同样用你的例子:
比如,某超市,甲乙两人,都是在离线的数据库操作A商品,离线数据库记录A商品数量为100个,甲进货100个的同时,乙出货50个,前者离线数据库中的A商品数量为200,而后者离线数据库中A商品的数量为50,
如果,甲先联网更新了A商品的数量为200
好,关键点就在这里了。这个200是要在程序中由程序员编程实现的。假设:
X1=当前的离线数据库中A商品数量
X2=与在线数据库断开连接时候的A商品数量
X3=当前在线数据库中的A商品数量。
那么更新后的数量为:
X3=X1-X2+X3
代入值后也就是
200-100+100。
这个算式的结果也就是在线数据库中的结果是200没错。现在X3=200了。
轮到乙了。同样的计算方式,这个时候代入以后的算式是·50-100+200。最终结果为150。
------解决方案--------------------
不管你是离线改,还是在线改,也没有直接去改库存的.
库存应该分进货出货
最后一SUM就是库存,而不是有个字段记录剩多少
------解决方案--------------------
还有多用户同时操作数据库,应该用数据库中的事务
先查询剩余,然后操作,放到同一个过程里
否则所有逻辑都在客户端做,查询剩余和插入记录之间的这点时间,就有可能有新纪录诞生,于是一定会不定期出现数据错乱
------解决方案--------------------
大一点的零售系统都是定期将POS服务器(可能服务着500台前端POS机)上把数据库下载到财务服务器,然后才进行库存过账。例如每天凌晨开始过账。
------解决方案--------------------
真正见识过一些大系统你会发现,真正的智慧总是显得很朴素的。那些显得稍微花哨的技术化的东西,往往反而是比较蠢得。
------解决方案--------------------
另外,有经验的人制作的零售系统,它是分门别类(根据几十种不同的账簿)地再有日账、月账汇总账簿的。也就是说每天有日结动作,每月有月结动作。不是像那些只会做个小OA程序的人那样只知道弄个“流水账”和“余额账”的。
也就是说,任何一个好的业务处理系统,都应该脱离了那些编程人员的限制,真正在你的系统结构中与业务专家的设计水平完全一致,才行。这样的系统中我们很少看到有什么程序员会跟用户顶牛的,因为程序员没有借口不去实现复杂的业务。
------解决方案--------------------
从逻辑上,没有办法满足你的要求,如果要保证系统可用性,那么必须在线。
如果可以牺牲可用性,你可以制定一个乐观或者悲观的锁策略(区别乐观和悲观的是,你愿意接受宁可有库存但是不发货,还是即便万一没有库存,也要发货,我们以前者为例:)
你需要做的是,首先假设预分配货物给某个门店,此时给记录加上一个标记(锁),然后此时别的客户端只能增加库存,不能发货。除非门店交还预分配的货物,解除锁定,此时另一个门店才可以加锁。
------解决方案--------------------
弱弱地问一下:
如果离线数据库中A商品数量是 100,然后甲出货 99,乙出货99,丙出货99,丁出货 99。
联网的时候打算怎么办?
------解决方案--------------------
哈哈,让物流赶紧进货,弥补亏空