asp.net 数据库并发

就是别人同时领取一个号码,发现号码会重复,别和我说用数据库自动增加,我现在比较迷茫,不知道.net里是如何处理并发的,我网上搜索了下,可以用数据库的事物来解决,但是我在想... 就是别人同时领取一个号码,发现号码会重复,别和我说用数据库自动增加,我现在比较迷茫,不知道.net里是如何处理并发的,我网上搜索了下,可以用数据库的事物来解决,但是我在想,这样会不会增加数据库的负担,如果10000个人同时用,会不会崩溃,所以我想利用.net的本身语言解决这个问题,不知道大家有什么好的建议或则意见,一个朋友跟我说用线程概念来解决,不知道是否可行,大家有经验的最好能贴下代码出来 展开
 我来答
markdian
2012-03-23 · 超过56用户采纳过TA的回答
知道小有建树答主
回答量:143
采纳率:0%
帮助的人:147万
展开全部
我个人喜欢把并发分成三类:
数据库级别的并发:这发生在多个系统事务在同一时间试图操作同样的数据的
时候,此时往往通过事务的隔离级别来解决.隔离级别过小会使数据不安全,而隔离级别过大又会降低数据库性能.因此大部分数据库将隔离级别设置成Read Committed,意思就是说一个事务在执行过程中可以得到其他事务已经提交的更新(注意是更新而不是插入). 而此时为了在一个事务内的多次查询中获得同样的数据,我们往往还需要将这多个查询放在一个只读事务里.
代码级别的并发:这发生在某个类中具有不安全因素(例如具有多个线程都可以修改的类变量),而这个类又处在多线程访问的模式下. 此时我们往往通过具体语言提供的同步机制来解决,在安全的同时也降低了性能,因为一个线程在访问时其他线程必须等待.
应用程序级别的并发: 这发生在多个业务事务同一时间操作同样的数据的时候,这会带来丢失更新和不一致读,在对数据的实时性要求不是很高的系统中,不一致读往往不是问题,用户也不会觉得不合理. 而在用户操作数据时发生丢失更新往往不能忍耐. 此时我们的解决方案是应用程序级别的锁定. 一种是乐观锁,通过给记录加版本号,在操作提交时如果发现在操作期间其他人修改过该条记录,则提示用户更新失败. 这适合在并发机率很低的情况使用,因为用户很可能填了一堆东西你却告诉他失败需要重填,他会发疯. 另一种是悲观锁,通过严格限制来避免冲突. 悲观锁分为写锁和读锁,写锁很简单,一个人在操作一条记录的时候其他人只能读该记录,而不能操作. 而读锁很严格,它又分为共享读锁和独占读锁,共享读锁指一个人只要在读该记录的时候,其他人就也只能读不能操作.而独占读锁是所有锁中最严格的,他实现只要一个在正在读该记录,其他人就不能读,这是为了保证用户获得的一定是最新记录,它假定其他人只要在读一条记录,就可能会修改它. 因为悲观锁需要在操作期间不断的加锁解锁,会严重影响性能,并且实现起来很麻烦,所以尽量少使用.
注: 系统事务指数据库级别的事务,对应用程序来说是指在一次请求或一次方法调用的过程中发生的数据处理. 与数据库中的事务是一个概念. 而业务事务指用户完整执行一次业务相关的操作过程中的数据处理.一次业务事务往往包含多个系统事务,例如首先将数据查询出来,然后修改提交,这是一次业务事务,但包含了查询和修改两个系统事务.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
独孤上崖
2012-04-01
知道答主
回答量:16
采纳率:0%
帮助的人:13.3万
展开全部
你说的是流水号吧。 你查下流水号的生成
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式