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

Posted

技术标签:

【中文标题】如何设计一对多的微服务数据库?【英文标题】:How to design microservice database one to many? 【发布时间】:2019-08-11 23:41:53 【问题描述】:

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

我的第一个想法是我有一个适用于所有飞机的数据库和一个适用于所有航班的数据库。航班表成为飞机的“间接”外键。当我调用飞行服务时,飞行服务使用飞行表中的 id 调用飞机服务,然后构建响应。那保证我不会直接从飞行服务中调用飞机数据库。

我的解决方案正确吗?这个用例的最佳实践是什么?

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

谁能帮帮我?

谢谢

【问题讨论】:

你考虑过“物化视图”模式吗?这有帮助吗:***.com/a/54676222/1235935 ? 是的,这很清楚,但我如何表示外键?数据库中包含飞机ID和航班表中的简单字段吗? 【参考方案1】:

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

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

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

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

数据加载(将检索多少数据) 服务命中计数(服务将被调用多少次)

然后你可以决定方法。

【讨论】:

以上是关于如何设计一对多的微服务数据库?的主要内容,如果未能解决你的问题,请参考以下文章

数据库表设计(一对多,多对多)

数据库 一对多,多对多 表设计

数据库 一对多,多对多 表设计

数据库 一对多,多对多 表设计

数据库中根据数据一对一,一对多,多对多关系设计

数据库表设计(一对多,多对多)