我正在开发一个ASP.Net应用程序,它本身并不是一个真正的分布式应用程序,但在某些时候会将所有数据同步到主节点。
为了能够将来自不同节点的数据存储在一个唯一的表中 没有ids的整理,采取的方法是:
NextRowId 由以下人员生成:
例如
Id = 20099,拆分为( NodeId = 200, LastDocumentId = 99)
LastDocumentId + 1 = 100
NextRowId = 200100
这在理论上是完美的,或者如果请求是按顺序处理的。但是,如果同时处理多个请求,则它们通常最终会生成相同的ID。
所以在实践中,当多个用户尝试同时更新同一个表时,如果存在多个id冲突。
我已经了解了为分布式系统生成唯一ID的最佳实践。然而,在这个时间点,它们都不是一个可行的选择,因为它们需要重新思考整个架构以及大量的重构。两者都需要时间,管理层不允许我这样做。
那么我可以通过其他方式确保生成的ID是唯一的,还是以顺序方式处理请求?所有这些,理想情况下无需重组应用程序或导致性能瓶颈。
答案 0 :(得分:2)
在您的键列上创建unique constraint。如果您碰巧两次插入相同的ID,请捕获异常并重新生成您的ID。
您可能希望改为使用Guids
。
也就是说,如果您需要知道您的数据与哪个节点相关联,那么应根据它为您的数据库建模:有2列NodeId
和DocumentId
。您还可以在多列之上生成唯一约束。