【发布时间】:2012-10-05 21:46:36
【问题描述】:
我有一个更新数据库表的服务器端 rest api。表格是这样的
ID PubId DocUuid DocFamUuid CorrelationUuid
1 156 1A 2A 3A
唯一键是 ID,此服务器端 API 为每个请求生成一个唯一的 DocUuid,它根据 PubId 生成一个 DocFamUuid 和 CorrelationUuid。因此,具有相同 PubId 的每个文档都将具有相同的 DocFamUuid 和相同的 CorrelationUuid。
我的问题是我正在查找数据库中是否存在来自传入请求的特定 pubId,如果存在,我选择第一个返回结果的 docFamUuid 和相关性Uuid,否则我会生成它们并将其保存到数据库。现在,我有一个集群服务器环境,我可以让两个不同的服务器获取两个单独的文档,并且都启动它们的处理线程。那么,在这种情况下期望的行为是什么? 1. 请求 1 从服务器 1 进入 rest API,它的 pubId 为 156,服务在 db 中查找它。 2. 请求 2 从服务器 2 到 rest API 访问数据库,它的 pubId 也是 156,它查找 db 表中不存在的记录。 3.请求1创建一个2A的docFamUuid和3A的correlationUuid并保存到db 4.请求2现在也创建了一个2B的docFamUuid和3B的correlationUuid,并保存到db表中。现在我们有两个不同的值
ID ID PubId DocUuid DocFamUuid CorrelationUuid
1 156 1A 2A 3A
2 156 1B 2B 3B
这是错误的,因为期望的结果是:
ID ID PubId DocUuid DocFamUuid CorrelationUuid
1 156 1A 2A 3A
2 156 1B 2A 3A
【问题讨论】:
标签: database rest concurrency