4

我想先说我不是 DBA,对于技术知识上的任何空白,我深表歉意。

我在一个微服务架构中工作,我们有大约十几个应用程序,每个应用程序都由其 Postgres 数据库实例(如果有帮助,它在 RDS 中)支持。每个微服务的数据库都包含一些表。可以安全地假设任何模式/表之间没有命名冲突,并且数据库之间没有任何数据分片。

我们一直遇到的问题之一是想要跨数据库分析/连接数据。现在,我们依靠一个 3rd Party 工具来缓存我们的数据,并可以跨多个数据库源进行查询(通过共享缓存)。

是否可以从我们所有的生产数据库创建模式/表的只读副本,并让它们可用于在单个数据库中查询?

是否有任何其他方法可以配置 Postgres 或 RDS 以使跨数据库连接成为可能?

4

1 回答 1

4

是否可以从我们所有的生产数据库创建模式/表的只读副本,并让它们可用于在单个数据库中查询?

是的,这是可能的,而且实际上很容易。

设置一个作为主服务器的 Postgres 服务器。

对于每个远程服务器,创建一个外部服务器,然后用于创建一个外部表,使数据可以从主服务器访问。

如果您在多个服务器中有多个表应该被视为主表中的单个表,您可以设置继承以使所有这些表看起来像一个。如果您可以定义一个“分片”键来标识这些服务器之间的不同属性,您甚至可以让 Postgres 仅从特定服务器请求数据。

所有外部表都可以像本地表一样连接。根据查询的类型,一些(或很多)过滤器和连接条件甚至可以下推到远程服务器以分发工作。

由于Postgres 外部数据包装器是可写的,您甚至可以从主服务器更新远程表。

如果远程访问和连接太慢,您可以基于远程表创建物化视图来创建数据的本地副本。然而,这意味着它不是实时副本,您必须管理表的定期刷新。

其他(更复杂的)选项是BDR项目或pglogical。似乎逻辑复制将内置到下一个 Postgres版本中(将于今年年底发布)。

或者您可以使用分布式的、无共享的系统,如Postgres-XL(这可能是设置和维护最复杂的系统)

于 2017-02-28T21:39:03.590 回答