2017-02-28 114 views
0

我想说,我不是DBA,所以对于技术知识上的差距抱歉。如何从多个postgres数据库创建只读副本到单个数据库?

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

一个我们一直运行到是想分析/加入跨数据库的数据的问题。目前,我们依靠第三方工具缓存我们的数据,并可以跨多个数据库源(通过共享缓存)进行查询。

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

还有没有其他的方法来配置的Postgres或RDS使在我们的数据库连接可能吗?

回答

0

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

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

设置一个充当主服务器的Postgres服务器。

对于每个远程服务器,创建一个foreign server,然后使用它创建一个foreign table,使数据可以从主服务器访问。

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

所有的外表都可以连接,就好像它们是本地表一样。根据查询的种类,可以将一些(或很多)过滤器和连接标准推送到远程服务器以分发工作。

由于Postgres Foreign Data Wrapper是可写的,您甚至可以从主服务器更新远程表。

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

其他(更复杂)选项是BDR项目或pglogical。似乎逻辑复制将被内置到next Postgres版本(将在今年年底发布)。

或者你可以使用一个分布式的,无共享系统,如Postgres-XL(这可能是最复杂的系统安装和维护)

相关问题