首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免分布式系统中的数据库ID冲突

如何避免分布式系统中的数据库ID冲突
EN

Stack Overflow用户
提问于 2018-11-28 04:44:43
回答 1查看 717关注 0票数 2

我正在为计算机科学课编写一个java应用程序。我的问题在这个项目的范围内没有那么大的问题,但可能会给现实世界和我的同学造成破坏,我想不出一个解决办法。这是一个系统,它的设计是运行在客户端上,然后联系数据库来读取和写入信息。

场景: order对象由一个订单Id、一些其他属性和一个项数组组成。每个项目都有一个id,所以我们存储它们的最好方法是使用一个表,其中每行都有order id和相应的item id。到目前为止已经够简单了。问题是,为了拥有唯一的is,我们必须让数据库设置它们。这很容易通过自动增量完成,现在订单id是在将订单插入到数据库期间创建的。下一步是从数据库中检索新的订单id,并使用它将我们的项添加到第二个表中。这里的主要问题是,在这两个步骤之间,有人可以创建一个新的顺序,这将导致创建的第二个顺序将所有的项分配给它,而不是第一个顺序。

我们知道客户机服务器模型可以通过一个客户机与数据库而不是多个数据库交互来修复这个问题,但是除了迁移到客户机/服务器模型之外,是否真的没有解决这个问题的方法呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-28 04:57:08

理想情况下,自动递增的数字不是正确的选择,因为它提供了基于串行分配的ID查询和提取信息的机会。这就是UUID通常出现在图片中的地方。大多数数据库提供了UUID的生成以及不同的策略。在您的例子中,由于您已经用MySQL标记了您的问题,您可以查看以下文档

uuid

使用UUID生成的值被认为是唯一的(即使跨机器,生成逻辑也考虑MAC地址)。如文档所示,它仍然有可能失败,但这是一种非常罕见的情况。

另一个选项是生成您自己的UUID,它在生成随机部分时考虑成员/节点ID。这将确保您在各个主机上具有唯一的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53512296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档