我处于一个位置,我将获得一个 GUID 列表,这些 GUID 将由 SQL Server 数据库在运行时分配。
我的直接想法是为 GUID 创建一个表。当订购一批 GUID 时,它们将被插入到表中。
然后,在运行时,将调用一个 SPROC 从表中选择一个 GUID。我可以检索下一个 GUID 并立即从表中删除它,或者检索下一个 GUID 并更新另一列以将其声明为已使用。
但这让我想知道同时对数据库进行两次调用以获得 GUID 的竞争条件的可能性。在我看来,如果时间完全不方便,则可以为这两个调用检索相同的 GUID。
Q1:我担心这种潜在的竞争状况是否正确?即它会发生吗?
Q2:有没有办法避免这种情况(例如设置一个 SPROC 来阻止每次调用?)
我能想到的一种至少可以使竞争条件失败的方法是设置另一个进行 GUID 分配的表,并将 GUID 列设置为唯一。然后,在运行时过程中,当检索到 GUID 时,它将通过 GUID 分配表分配给产品。如果为两种产品颁发了相同的 GUID,那么当需要分配它们时,其中一种产品将无法分配并被拒绝。