【问题标题】:Why is a GUID is the best choice for a PK if you're going to be doing replication?如果要进行复制,为什么 GUID 是 PK 的最佳选择?
【发布时间】:2009-04-30 21:48:52
【问题描述】:
我正在构建一个带有 Oracle 后端的 Intranet Web 应用程序。出于对本次讨论不重要的原因,Oracle DB 将被复制到另一台服务器上。我有理由确定我们将使用 Oracle Basic Replication,而不是 Advanced。
谁能向我解释一下为什么大多数关于主键的讨论都是这样的:
- 在 99% 的情况下,为 PK 使用自动递增的整数就可以了
- 除非您正在执行复制。然后为您的 PK 使用 GUID。
似乎没有人解释为什么会出现复制异常,我也不明白为什么。
【问题讨论】:
标签:
database-design
primary-key
replication
guid
【解决方案1】:
我相信 GUID-for-replication 参数只有在两个服务器都将接收新数据时才真正适用。然后您不希望新行发生冲突,因此使用 GUID 作为 PK - 复制可以双向进行。
我们一直在复制自增表,但它是严格的主/从复制,其中数据仅写入主节点。
【解决方案2】:
一个词:合并
合并复制可以工作的唯一方法是,如果所有“主”框都可以创建一个新密钥,而不会与其他密钥冲突。
【解决方案3】:
如果您考虑当两台服务器相互复制并在同步之间添加数据时会发生什么,问题就会变得明显:
Time Server NewID
001 A 1
002 A 2
003 <sync of server A and B>
004 A 3
005 B 3
006 <sync of server A and B>