如果您要进行复制,为什么 GUID 是 PK 的最佳选择?

发布于 2024-07-18 06:23:27 字数 302 浏览 5 评论 0原文

我正在构建一个带有 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

冬天旳寂寞 2024-07-25 06:23:27

我相信复制的 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.

暖心男生 2024-07-25 06:23:27

一个词:

合并 合并复制可以工作的唯一方法是所有“主”框都可以创建一个新密钥而不与其他密钥发生冲突。

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.

独自唱情﹋歌 2024-07-25 06:23:27

如果您考虑一下当两个服务器相互复制并在同步之间添加数据时会发生什么,问题就变得很明显:

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>

<---现在两个不同的记录具有相同的 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:

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>

<---two different records have the same ID now, so there's a conflict!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文