求教:关于web中(采用asp.net+sqlserver开发),避免并发,锁的问题。求各位给些指点,见下。。。

十年技术路 2016-04-22 09:58:40
采用的是asp.net平台开发,用的是MSSQL SERVER数据库,里面有一张核心表,有很多地方需要往该表插入数据。
需求简化后是这样的:该表有个字段Num,首先获取当前该表最新的一条记录A,然后将记录A中的Num值加上一个随机数,这样生成一条记录B,然后将记录B插入该表作为最新的数据。
在其他多个地方,均是如此操作,都是读取当前最新的一条记录,然后进行加减,再将加减后的数据插入该表作为最新的。
以上是一个简单的举例,实际情况更多变数,并且并发在某些时段也会很高,这样会造成数据可能不准确。
个人作为才工作半年的菜鸟,想到的解决方式实在不成熟,请教大家给些指点,如何尽量高性能的解决处理。
(现在想到的初步做法是两种:
1.给数据库中该表加序列锁;
2.或者在后台c#代码里任何操作该表逻辑的地方,进行lock锁。
但也就想到这里了,具体细节上也不知道还要注意什么,并且感觉处理的也粗糙,性能也不高。
所以希望大家帮忙给些具体的指点或者思路,不甚感激!谢谢各位。。)
...全文
251 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
十年技术路 2016-04-29
  • 打赏
  • 举报
回复
引用 11 楼 hanjun0612 的回复:
自动增长列不就可以解决了?为何要最大数+随机数?这个的用处在哪?
谢谢
十年技术路 2016-04-29
  • 打赏
  • 举报
回复
引用 12 楼 starfd 的回复:
自增列是关系型数据库都支持的功能,这个唯一性是由数据库自身保证的(不过我碰到过sql2000里面同主键的情况,碉堡了)
谢谢
  • 打赏
  • 举报
回复
自增列是关系型数据库都支持的功能,这个唯一性是由数据库自身保证的(不过我碰到过sql2000里面同主键的情况,碉堡了)
正怒月神 版主 2016-04-26
  • 打赏
  • 举报
回复
自动增长列不就可以解决了?为何要最大数+随机数?这个的用处在哪?
wdh123love 2016-04-25
  • 打赏
  • 举报
回复
如果算法规定,可以考虑用触发器,就是当插入一条记录时,将该记录Num和上一记录的Num通过算法计算得到结果,然后将这个结果作为此记录的最终结果
  • 打赏
  • 举报
回复
核心表为啥不直接自增列呢?
十年技术路 2016-04-25
  • 打赏
  • 举报
回复
引用 8 楼 wdh123love 的回复:
如果算法规定,可以考虑用触发器,就是当插入一条记录时,将该记录Num和上一记录的Num通过算法计算得到结果,然后将这个结果作为此记录的最终结果
触发器里面写逻辑计算。。。如果逻辑稍微麻烦点,或者为以后维护来说,不知道怎样呀。。
十年技术路 2016-04-25
  • 打赏
  • 举报
回复
引用 7 楼 starfd 的回复:
核心表为啥不直接自增列呢?
自增列的话,具体是怎样的呢?本人才疏,是不是哪里理解不对:一列自增,每列插入后必然会自增,那同一时间获取数据时,也有可能会造成并发呀。。比如都得到了是100(自增列)的这条,都相加,然后一起提交。。。这。。。求教呀
十年技术路 2016-04-23
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
另外,按照你说的“然后将记录A中的Num值加上一个随机数”这个是“需求”,我不太相信! 业务需求,怎么会扯上什么“随机数”概念?可显然是一些只会写代码的人来指挥需求。有些公司让一些变成的人指挥产品人员、美工去设计,自然就会一团糟糕。产品人员、美工都是超脱于技术人员的。技术人员总的来说是很低级的人员,不应该用编程人员的脑袋来套用到需求上,而要用用户的脑袋来想需求。 真正的需求,如果出现“在最后一个记录的Num值上加上随机数”这样的设计,也真是逆天得爆表了。这样的需求设计人员,也该欢欢脑袋重新学习产品设计了。
前辈,非常谢谢您能帮忙指点! 然后,可能我描述的不太正确,我补充下,其实是这样的: 核心表T 包含俩字段(时间,数值), 很多地方需要向该核心表插入数据进行记录,而每次往该表插入一条数据前,都要先获取这个表的最后的插入记录(根据时间字段),比如此时获得的最新记录A为(2016/4/22 22:00:01,1000),然后1000进行计算后,假设计算结果为1200,这样就得到一条新的记录B(当前时间,1200),然后插入该表。 实在经验有限,麻烦前辈多费些口舌,谢谢!
十年技术路 2016-04-23
  • 打赏
  • 举报
回复
前辈,非常谢谢您能帮忙指点! 然后,可能我描述的不太正确,我补充下,其实是这样的: 核心表T 包含俩字段(时间,数值), 很多地方需要向该核心表插入数据进行记录,而每次往该表插入一条数据前,都要先获取这个表的最后的插入记录(根据时间字段),比如此时获得的最新记录A为(2016/4/22 22:00:01,1000),然后1000进行计算后,假设计算结果为1200,这样就得到一条新的记录B(当前时间,1200),然后插入该表。 实在经验有限,麻烦前辈多费些口舌,谢谢!
十年技术路 2016-04-23
  • 打赏
  • 举报
回复
希望各位给些经验上的建议或者思路。。。不甚感激!!!
  • 打赏
  • 举报
回复
另外,按照你说的“然后将记录A中的Num值加上一个随机数”这个是“需求”,我不太相信! 业务需求,怎么会扯上什么“随机数”概念?可显然是一些只会写代码的人来指挥需求。有些公司让一些变成的人指挥产品人员、美工去设计,自然就会一团糟糕。产品人员、美工都是超脱于技术人员的。技术人员总的来说是很低级的人员,不应该用编程人员的脑袋来套用到需求上,而要用用户的脑袋来想需求。 真正的需求,如果出现“在最后一个记录的Num值上加上随机数”这样的设计,也真是逆天得爆表了。这样的需求设计人员,也该欢欢脑袋重新学习产品设计了。
  • 打赏
  • 举报
回复
编程的人指挥
  • 打赏
  • 举报
回复
引用 楼主 asdfjkjkjk 的回复:
[b] 采用的是asp.net平台开发,用的是MSSQL SERVER数据库,里面有一张核心表,有很多地方需要往该表插入数据。 需求简化后是这样的:该表有个字段Num,首先获取当前该表最新的一条记录A,然后将记录A中的Num值加上一个随机数,这样生成一条记录B,然后将记录B插入该表作为最新的数据。
一:单独设计一个表,专门保存这个“最大编号”。只有一行、一列,就够了。(如果你有n个表都有这个“最大编号”机制,那么这个表可以有n行、2列,就够了) 二:没有必要用这种“读取最后一条记录”的机制产生ID的,就要避免这样设计。

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧