0

我有一个更新数据库表的服务器端休息 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
4

1 回答 1

0

这更像是一个并发问题而不是休息问题。您可以在数据库周围添加某种锁定机制,并在最终插入之前立即检查现有的 pubId。如果存在冲突,您可以以某种方式在服务器端解决它,或者从其余服务返回 409 CONFLICT。

于 2012-10-06T03:24:45.147 回答