【问题标题】:Multiple request synchronization to my rest API.多个请求同步到我的 rest API。
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 什么样的锁定机制是可能的?
    • 可用的锁定机制实际上取决于你的项目是用什么语言实现的,以及正在使用什么数据库。
    猜你喜欢
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多