Design patterns 在多用户应用程序中提交操作的正确方法

Design patterns 在多用户应用程序中提交操作的正确方法,design-patterns,transactions,logic,Design Patterns,Transactions,Logic,假设我们有一个简单的注册应用程序,其中nick应该是唯一的。 两个人决定同时签约 首先,我必须检查刻痕是否已经存在。 如果有,则将新用户添加到数据库中,如果没有,则添加新用户, 大概是这样的: 如果(!db.userExists(“John”)){ …一些操作。。 数据库保存(新用户(“John”); } 其他的 打印(“已存在”); 乍一看,一切都很简单 但是,如果两个人都选择尼克·约翰,同时运行脚本,会发生什么呢 在if和save指令之间的间隔期间,该人员将执行该操作。因此,它将与其他用户

假设我们有一个简单的注册应用程序,其中nick应该是唯一的。 两个人决定同时签约

首先,我必须检查刻痕是否已经存在。
如果有,则将新用户添加到数据库中,如果没有,则添加新用户,
大概是这样的:

如果(!db.userExists(“John”)){
…一些操作。。
数据库保存(新用户(“John”);
}
其他的
打印(“已存在”);
乍一看,一切都很简单

但是,如果两个人都选择尼克·约翰,同时运行脚本,会发生什么呢

if
save
指令之间的间隔期间,该人员将执行该操作。因此,它将与其他用户重叠

所以问题是如何解释像这样的操作?

也许这太偏执了:)

根据编程语言和平台以及不同的实现,有几种机制可以促进这种操作。但是一般来说,两个用户在微毫秒内同时做同样的事情是很少见的,如果发生这种情况,那么只有一个用户会赢得比赛,这是因为数据库表锁、网络、时间戳、计算机速度和其他原因

如果您已经按照要求完成了的所有常规过程,那么您应该会做得很好,事实上,如果表是使用唯一用户名创建的,那么数据库将不允许同时设置两个相同的值,即表锁

这是我的50美分


注意。

取决于您使用的框架。。Spring、Dropwizard等框架提供了注释,以实现事务性