两个进程,每个进程中有一个线程往SQL Server的表A中insert记录,但要求整张表A中的字段a是顺序递增的
也就是1、2、3、4、5、6……
有什么办法能在尽可能少用锁,尽可能不过分影响性能的情况下解决这个需求?
用了identity关键字建表,在单线程的情况下OK,但在并发情况下并不能保证严格顺序递增!
两个进程,每个进程中有一个线程往SQL Server的表A中insert记录,但要求整张表A中的字段a是顺序递增的
也就是1、2、3、4、5、6……
有什么办法能在尽可能少用锁,尽可能不过分影响性能的情况下解决这个需求?
用了identity关键字建表,在单线程的情况下OK,但在并发情况下并不能保证严格顺序递增!
两个进程本来就不是一个一个来的,还要求在无任何锁的前提下一个一个来,这不是为难数据库吗。
所以必须有两把锁,每个进程执行完后释放对方的锁。可以锁数据库的行,可以锁两个文件,可以用操作系统的锁等。
但是。。。。。。。。问题是不是一定要那么复杂?一般发现自己遇到一个稀奇古怪的问题的时候,可能需要换个角度看看自己是不是走入死胡同了。
如果想让大家帮你看看是不是走入死胡同了,最好发你原始的需求出来,而不是数据库锁什么的。
2 回答1.9k 阅读✓ 已解决
1 回答2.2k 阅读
1 回答830 阅读✓ 已解决
1 回答1.4k 阅读
1 回答788 阅读
你是想让每个线程生成的序号连续递增吗?
你可以试试自己制作递增种子表,根据生成的记录数批量取得一批连续的序号
但这样做有个弊端,如果操作失败回滚,可能造成序号丢失一部分