【问题标题】:Is it wrong to link one database to another in postgres?在 postgres 中将一个数据库链接到另一个数据库是错误的吗?
【发布时间】:2021-08-30 07:43:44
【问题描述】:

既然我们知道微服务和 Docker 的架构。您认为在两个微服务中使用相同的“posgres”但使用两个独立的数据库是错误的吗?
我将用一个例子来解释:‌
一项服务负责管理用户数据库,另一项服务负责管理帖子数据库(在博客上)。
我想使用“posgres”,但我怎样才能以最佳方式连接这个数据库? (“posgres”中有一个名为dblink的函数。使用它是否正确且最优?)
我使用队列来连接这两个服务,我不想为每个 micro 创建单独的 posgres。

docker containers:
  - user (manage user info with rest api)
  - post (manage user's post with rest api)

posgresql:
  - database name: user
    - table name: user
       - columns: firstname, lastname, username, id
  - database name: post
    - table name: post
       - columns: userId, title, content

注意:数据库可以是 postgres 或 mysql 之类的任何东西 ....
我希望我能够正确解释我想要什么:)

【问题讨论】:

  • PostgresPostgresql,没有posgresposgresql
  • 为什么不用一个数据库两张表呢?请记住,关系数据库是具有两个或多个表之间的关系的数据库。每个数据库一个表的策略与使用关系数据库的全部要点背道而驰。
  • 不相关但 Postgresql 中的 dblink 早已被远为优秀的外国数据包装器和 foreign tables 所取代。
  • 微服务的主要目标是能够在不依赖其他服务的情况下对服务进行更改。只要每个服务不访问另一个数据库(并且这样做会在服务之间创建依赖关系),我认为将两个数据库都放在同一个 Postgres 实例中没有问题。
  • MySQL 所谓的“数据库”实际上是一种模式。因此,如果您确实在 MySQL 中使用了两个“数据库”,那么您将在 Postgres 的一个数据库中使用两个 模式。那么你确实可以在两个表之间有一个外键。

标签: postgresql docker microservices


【解决方案1】:

在微服务之间不共享数据库的建议主要是因为要求两个服务具有相同的数据模型会抑制服务独立发展的能力。

因此,在同一个物理 DBMS* 实例中拥有不同的数据库并不违反这一点,而且因为您通常无法表达(或不表达)不同数据库中的表之间的关系,如果将来有理由将数据库移动到单独的实例中,您可以通过一种相当简单的方式做到这一点。

仍然存在 SPOF,您需要确定是否可以接受。

Jonathan Willcock 提出了一个很好的观点,在这个例子中,两个数据库都只有一个表,这有损于使用 Postgres 等关系数据库的主要好处。您可能会发现值得让post DB 包含一个基本的user 表,以便post 服务可以验证帖子是否归属于实际存在的用户。

*:在某种程度上,在过去 20 年左右的时间里,使用数据库的趋势既指表的集合,又指提供对数据库的访问和解释查询等的进程/服务器。(在早期称为数据库管理系统)会产生这样的混乱。

【讨论】:

    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    相关资源
    最近更新 更多