如果您要进行复制,为什么 GUID 是 PK 的最佳选择?
我正在构建一个带有 Oracle 后端的 Intranet Web 应用程序。 Oracle DB 将被复制到另一台服务器上,其原因对于本次讨论来说并不重要。 我相当确定我们将使用 Oracle Basic Replication,而不是 Advanced。
有人可以向我解释为什么大多数围绕主键的讨论都是这样的吗:
- 99% 的情况下,使用自动增量整数进行 PK 都很好
- ,除非您正在进行复制。 然后使用 GUID 进行 PK。
似乎没有人解释为什么复制例外,我不明白为什么。
I'm building an intranet web app with an Oracle back end. The Oracle DB will be replicated on another server for reasons that aren't important to this discussion. I'm reasonably certain we'll be using Oracle Basic Replication, not Advanced.
Can someone explain to me why most discussions around Primary Keys go something like:
- Use of auto-incremented ints for PKs is just fine 99% of the time
- EXCEPT if you're doing replication. Then use GUIDs for your PKs.
Nobody ever seems to explain why the exception for replication, and I don't understand why.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我相信复制的 GUID 参数仅在两台服务器都接收新数据时才真正适用。 那么您不希望新行发生冲突,因此使用 GUID 作为 PK - 复制可以双向进行。
我们一直在复制自动增量表,但这是严格的主/从复制,数据仅写入主服务器。
I believe the GUID-for-replication argument only realy applies if both servers will be receiving new data. Then you don't want new rows to conflict, so use GUIDs as the PK - replication can go both ways.
We replicate autoincrement tables all the time, but it's a strict master/slave replication where data is only written to the Master.
一个词:
合并 合并复制可以工作的唯一方法是所有“主”框都可以创建一个新密钥而不与其他密钥发生冲突。
One word: MERGE
The only way merge replication can work is if all of the "master" boxes can create a new key without it conflicting with the others.
如果您考虑一下当两个服务器相互复制并在同步之间添加数据时会发生什么,问题就变得很明显:
<---现在两个不同的记录具有相同的 ID,因此存在冲突!
If you consider what happens when two servers that are replicated with each other and have data being added to them between synchronization, the problem becomes apparent:
<---two different records have the same ID now, so there's a conflict!