database - 如何设计一对多的微服务数据库?

标签 database foreign-keys microservices

我有一个关于微服务和数据库设计的问题。情况:我有一个 Service AircraftsService,它处理有关飞机、飞机类型等的所有数据。我有一个 Service FlightsService 可以处理有关航类的所有数据。我必须将飞机与航类联系起来。通常我会在链接飞机的航类表中创建一个外键。但在微服务架构中,我知道我有域和独立的数据库。所以我的问题是如何表示这个问题。

我的第一个想法是我有一个所有飞机的数据库和一个所有航类的数据库。航类表成为飞机的“间接”外键。当我调用航类服务时,航类服务使用航类表中的 ID 调用飞机服务,然后构建响应。这 promise 我不会直接从航类服务调用飞机数据库。

我的解决方案是否正确?此用例中的最佳做法是什么?

在我思考这个问题之后,当我删除飞机时我必须告诉飞行服务指定的飞机不再存在并且飞行服务必须更新“间接”外键。

有人可以帮帮我吗?

谢谢

最佳答案

在处理微服务时,有多种最佳数据库实践方法,它可能因所使用实体的域以及您的应用程序使用范围而异。

微服务中数据库设计的最佳实践很少,首先列出其中的一些

1 - Private-tables-per-service – each service owns a set of tables that must only be accessed by that service
2 - Schema-per-service – each service has a database schema that’s private to that service
3 - Database-server-per-service – each service has it’s own database server.

您可以根据您的数据大小和数据数量混合搭配这些。

我希望您引用并浏览此页面以获得完美示例。

Microservices Database Best practices

确定您将拥有的每项服务的负载。负载可以通过两种方式计算。

  • 数据负载(将检索多少数据)
  • 服务点击次数(服务将被调用多少次)

然后你可以决定方法。

关于database - 如何设计一对多的微服务数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55275001/

相关文章:

sql - 多个外键作为主键 postgres,我应该这样做吗?

architecture - 在微服务之间共享代码和架构

mysql - 如何优化查询?我能读懂什么? (如果可以的话,用俄语,或英语)

mysql - 组函数MySql的无效使用

mysql - golang -> gorm : How I can use sql. NullInt64 在 mysql 中是 int(10)?

ruby-on-rails - Rails 的 ActiveRecord::Migration 的外键?

spring - 微服务之间的原子操作

spring-data-jpa - 是否可以在 spring 数据中为关系数据库和非关系数据库创建一个存储库?

mysql - 为多对多关系建模的正确方法

mysql - 单个表或拆分表在数据库中保存这些记录?