首页 新闻 搜索 专区 学院

mssqlserver并发同事update一条数据

0
[待解决问题]

怎样避免同事更新一条数据带来的并发问题  比喻一个商品库存只有一个了 很多人在抢购 这个怎么解决  谢谢

zhyhunan的主页 zhyhunan | 初学一级 | 园豆:64
提问于:2012-02-27 21:16
< >
分享
所有回答(5)
0

这个具体情况具体对待,抢购这个一般通过占用库存来解决,扣减库存并不是直接去数据库里扣减的,尤其遇到秒杀、抢购之类的促销时,库存计算都是在内存或缓存里进行的,也有用队列来处理的,稍微复杂些,但更准确

丁学 | 园豆:18530 (专家六级) | 2012-02-27 21:25
1

锁+事务

artwl | 园豆:16536 (专家六级) | 2012-02-27 21:35

能否具体点 谢谢

支持(0) 反对(0) zhyhunan | 园豆:64 (初学一级) | 2012-02-28 13:29
0

修改的时候可以使用那些需要修改的字段的修改之前的值作为条件来过滤。说的很绕口,不知道说清楚了没有!

具体就是可以参考linq生成的sql。(乐观锁)

小小刀 | 园豆:1991 (小虾三级) | 2012-02-27 22:42

明白你的意思了 谢谢 非常感激

 

支持(0) 反对(0) zhyhunan | 园豆:64 (初学一级) | 2012-02-28 13:28

这样做是有问题的,因为只解决了不能出现并行减数字的问题,但实际需求是在抢购,你不能因为两个用户同时抢,就让其中之一抢不到

支持(0) 反对(0) 丁学 | 园豆:18530 (专家六级) | 2012-02-28 20:53

@丁学: 没有考虑实际的业务,呵呵!

支持(0) 反对(0) 小小刀 | 园豆:1991 (小虾三级) | 2012-02-28 22:38
0

脏数据

1、每次update的时候检查一下数据库,也就是做一下安全判断

2、上锁

优弊性:第一种方法,任何一次都需要去查看数据,比如询问数据库里面的货够不够卖出

           优点:张三来买货和李四来买货 互相不干扰,各买各的,反正都需要安全验证的

          

          第二种上锁,不需要去做安全判断,但是同一时刻只有一笔数据在updata,这样影响高并发,淘宝等大网站决定不会采用这一种

| 园豆:264 (菜鸟二级) | 2012-02-28 16:09

一楼(丁学)说淘宝不会去数据库加减,而是在内存或者缓存上

这句话可以说对,也可以说错

对:数据确实在内存上操作,而不是本地硬盘

错:不能把这块内存称呼为缓存,而这个其实是现在大企业实现高并发时比较流行的NOSQL数据库,用的就是内存

支持(0) 反对(0) | 园豆:264 (菜鸟二级) | 2012-02-28 16:12

@亦: 表述不严谨,见谅

之所以说是“内存或缓存”是因为我知道有一些网站做活动的页面是在一台服务器上的,这种情况下,可以直接加载到“内存”(其实是本地缓存),而一些大的网站会做负载均衡,这种时候一般通过第三方的缓存来实现

实际都是在“内存”里,为了避免硬盘IO而已,实现方式略有不同

支持(0) 反对(0) 丁学 | 园豆:18530 (专家六级) | 2012-02-28 20:57
0

update 本身就有锁   update  table set amount=amount-X where amount>=X
这样不就OK了

日暮青色 | 园豆:459 (菜鸟二级) | 2012-03-02 08:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册