请教一个C#+sql server并发处理的问题,

业务规定一个账号一天只能提交一笔交易,账号可以同时多处登录,这样造成一个账号在执行插入事务排队时,而一个账号在插入之前执行是否存在记录,从而判断出不存在记录,又可以提交,... 业务规定一个账号一天只能提交一笔交易,账号可以同时多处登录,这样造成一个账号在执行插入事务排队时,而一个账号在插入之前执行是否存在记录,从而判断出不存在记录,又可以提交,这样就造成实际一天存在一笔以上的交易。这种情况这么处理的?
问了一些朋友,有说用唯一约束的,也有说用事务事务的排他锁,也说用生产者消费者模式的,但都存在一定的问题。
1、用约束的情况:(username,date,ordertype)几个字段做唯一约束,但存在一种情况就是ordertype=1时不能重复,但ordertype=2时是可以重复的。
2、事务的隔离级别:不能解决根本问题,好像在sql server四个隔离级别中序列化就是最高级别了,一个查询事务也不能阻塞另一个查询事务吧。总不能锁表吧,这张表涉及的查询很多,肯定不合适。
3、队列:改动量较大,因系统现在已经接近上线阶段不允许大量代码改动。
所以最终用了个lock的方式。不知道这个东西在并发较大的时候会不会造成等待的时间过长?每个处理平均响应时间大概在0.5秒左右,50个同时并发会不会有问题?还有帮忙看看代码有没有问题,会不会造成死锁之类的,呵呵……

或者有其他的更好的方法提供更好!!谢谢!
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
lybgl
2014-03-20
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
就是加锁才能解决这样的同步的问题,不会出现问题,你的没问题, 把锁设置成Private类型的,如果是public的有可能超出代码范围,就控制不住了
追问
谢谢!请问有什么方式可以测试这个锁在50并发的情况会造成的等待时间?
追答
这样的话你只能写个测试程序了 随便给一些数据 ,同时调用这个方法,调用50次就看看等待时间
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
382580322
2014-03-20
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
在存储过程里写就是了
判断存在否
存在返回
不存在插入
更多追问追答
追问
存储过程中给事务加最高隔离级别都会存在问题,上面已经分析了!
追答
不懂
队列2个订单
队列1 判断不存在 插入成功
队列2 判断已经存在 插入失败
怎么可能出现2个?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CrissAleX
2014-03-20
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
没有特别好的方法,如果你觉得程序里面加lock会由于并发率问题,导致等待.
那么,你可以在存储过程中,使用TABLOCK(表锁)来锁表.防止该表的数据被更新.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式