并发请求下,数据库连续编号重复处理(一)
·
文章系列
前言
在并发环境下,数据库内数据连续编号无法保证不重复,本文就问题复现,并给出解决方案
一、业务背景
同一张数据表内,根据不同类型,每个类型进行递增排序,类型数量不确定
二、数据库准备
1.创建数据表
SQL如下:
CREATE TABLE [dbo].[Students] (
[StudentID] uniqueidentifier NOT NULL,
[Type] int NOT NULL,
[Number] int NOT NULL
)
GO

2.读取最大值,连续编号10条,并存入数据库
代码如下:
int findMax = _context.Students.AsNoTracking().Where(t => t.Type == 0).DefaultIfEmpty().Max(t => t.Number);
List<Student> students = new List<Student>();
for (int i = 0; i < 10; i++)
{
students.Add(new Student
{
Type = 0,
Number = ++findMax,
});
}
_context.Students.AddRange(students);
_context.SaveChanges();
3.运行项目,启动20线程,每个线程运行10次

4.查询数据库数据
SQL如下:
SELECT Students.Number,count(*) as count FROM [dbo].[Students] GROUP BY Students.Number order by count desc

可以看到并发下面大量异常插入,这里就要想办法如何保障排序的唯一性,下一章给出思路解决过程
总结
本文记录了问题的发现,下面接着是解决方法路程
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
http://t.csdn.cn/jhoH7

所有评论(0)