Spring boot 在微服务体系结构中,我可以在另一个数据库中保留一个数据库表的副本吗?

Spring boot 在微服务体系结构中,我可以在另一个数据库中保留一个数据库表的副本吗?,spring-boot,microservices,domain-driven-design,Spring Boot,Microservices,Domain Driven Design,我目前还不熟悉微服务体系结构,所以请提前感谢 我有两个不同的服务,一个是用户服务,一个是足球运动员服务,每个都有各自的数据库(用户数据库和足球运动员数据库)。 足球运动员服务有一个数据库,其中有一个存储足球运动员信息的表。 用户服务有一个数据库,该数据库存储用户详细信息以及其他与用户相关的数据 现在,用户可以通过查询足球运动员服务将足球运动员添加到他们的球队中,我需要将他们存储在某个地方,以便稍后显示。 目前,我正在将每个用户的足球运动员存储在用户数据库中的一个表中,通过该表,我向足球运动员服务

我目前还不熟悉微服务体系结构,所以请提前感谢

我有两个不同的服务,一个是用户服务,一个是足球运动员服务,每个都有各自的数据库(用户数据库和足球运动员数据库)。 足球运动员服务有一个数据库,其中有一个存储足球运动员信息的表。 用户服务有一个数据库,该数据库存储用户详细信息以及其他与用户相关的数据

现在,用户可以通过查询足球运动员服务将足球运动员添加到他们的球队中,我需要将他们存储在某个地方,以便稍后显示。 目前,我正在将每个用户的足球运动员存储在用户数据库中的一个表中,通过该表,我向足球运动员服务打电话,通过ID向我提供特定足球运动员的详细信息,并通过映射用户ID将其保存在用户数据库中

那么这是一个好主意吗?它是否意味着在两个服务之间复制数据 如果是,还有什么其他方法可以实现相同的功能

目前,我正在将每个用户的足球运动员存储在用户数据库中的一个表中,通过该表,我向足球运动员服务打电话,通过ID向我提供特定足球运动员的详细信息,并通过映射用户ID将其保存在用户数据库中

“缓存”是一种相当常见的模式。从用户微服务的角度来看,来自足球运动员的数据只是另一个输入,您可以保存也可以不保存。如果要缓存,通常需要在缓存的数据上有某种时间戳/版本

缓存标识符是很正常的-我们通常需要某种类型的标识符来连接两个不同位置的数据

如果您发现自己在用户域逻辑中使用足球运动员数据(也就是说,用户更改的方式取决于可用的足球运动员数据)。。。这更令人怀疑,并可能表明您的边界绘制错误/您的某些能力位于错误的位置

如果您希望用户服务是自主的,也就是说,即使足球运动员停止服务,也能继续为其服务,然后,您的代码需要能够从足球运动员数据的缓存副本中工作,和/或能够暂停部分工作,直到该数据的新副本可用。

对于微服务,人们通常遵循DDD(域驱动设计): 因此,在您的案例中,有两个域,即2个服务:

  • 使用者
  • 足球运动员
  • 所以,用户服务应该只执行特定于用户的任务,而不应该关心足球运动员的数据

    因此,根据DDD,与用户链接的足球运动员应该存储在足球服务中


    在微服务体系结构的情况下,复制ID不会被视为复制。

    实际上,我想让足球运动员可重用。假设用户A将11名足球运动员添加到他们的团队中,另一个用户B也可以将其中一些足球运动员添加到他的团队中。要显示的足球运动员应该是非常用户特别的。根据你的建议,我能做的就是将球员id存储在用户表中。这在架构上是正确的,对吗?足球运动员是一个单独的表,还是一种用户类型?足球运动员服务有一个不同的数据库,只包含足球运动员信息。还有一个用户服务,它有一个addFootballer函数,它接收要添加的特定足球运动员的id,然后调用足球运动员服务来获取特定足球运动员,并为特定用户存储特定足球运动员。我目前的做法是创建一个单独的表来存储用户在用户数据库中添加的足球运动员id。因此,当为特定用户显示足球运动员列表时,它不必再次呼叫足球运动员服务。这是否是数据复制,还是一个好的实践?不,我不认为这是一个好的实践。好的做法是为足球运动员服务中的用户和足球运动员之间的关系建立一个单独的表,即足球运动员数据库。所以,只要您需要足球运动员数据,就可以从用户服务向足球运动员服务进行api调用。如果您只需要足球运动员数据,那么您可以直接致电足球运动员服务。