【问题标题】:how to handle microservice database relations?如何处理微服务数据库关系?
【发布时间】:2019-12-03 07:56:40
【问题描述】:

我正在开发一个示例微服务项目。 我有教师服务、学生服务、学习服务和体育服务。 我使用每个服务模式的数据库

一位老师有很多学生 一个学生有很多学习数据和运动数据 老师可能会因学生而改变

  • 如何处理关系?

老师想查看学生的学习和运动数据

  • 在微服务中处理这种情况的最佳方法是什么

我尝试将学生 ID 存储在教师服务中

|---------------------|------------------|
|      teacher_id     |     student_id   |
|---------------------|------------------|
|          12         |         34       |
|---------------------|------------------|

但在学习服务和体育服务中,我只存储 student_id。

获取老师的学生学习和运动数据。我从教师服务中获取教师的所有学生 ID,并将其传递给学习服务和体育服务。

我通过 Rest GET 方法传递学生 ID 并且它越来越长

=====> 更新。

如何将teacher_id 和student_id 存储在所有数据库中(具有一致性的重复数据)或使用第三个数据库(分片数据库)

【问题讨论】:

  • 您使用的方法是有效的,尝试使用 Feign Client (cloud.spring.io/spring-cloud-netflix/multi/…) 减少样板代码并尝试使您的外部服务高可用。同时创建多个实例并平衡它。
  • 微服务 A 调用微服务 B 获取学生详细信息,也可能向微服务 C 询问其他详细信息,依此类推。
  • 但是@YogeshPrajapati,GET 方法有字符限制,如果我们通过所有学生 _id API 可能会拒绝,如果使用分页,我们需要一直调用它。如何处理这个
  • 哦,对不起,我误解了你的问题。您不应该通过 GET 一次将所有 id 传递给另一个服务
  • 但是在Rest Get中是用来查询的,如何用其他方法替换in

标签: database rest spring-boot microservices spring-cloud


【解决方案1】:

我认为问题在于您还没有完全探索该领域并且急于弄清楚如何创建数据库关系。现在,不要关注数据库键的存储位置,因为这不再是第 3 范式数据库设计。

考虑bounded contexts。老师的背景可能非常小——老师除了技能之外不“拥有”任何东西。一门学科有许多班级/部分,每个班级/部分都有一名教师和一名学生。一项运动会有教练和学生。

这样思考将帮助您确定哪些服务需要包含对自身上下文之外的资源的引用。

【讨论】:

  • 我相信这是正确的答案。例如,不清楚“研究”代表什么?它可以是学校提供的一组学习资料,也可以是学生的学习资料,两者的存储方式不同。
猜你喜欢
  • 2017-11-09
  • 2017-12-05
  • 2020-12-14
  • 2017-07-20
  • 2020-07-25
  • 2021-03-25
  • 2021-03-30
  • 2022-01-02
  • 2021-02-26
相关资源
最近更新 更多