跨多个异构数据库执行连接,例如PostgreSQL和MySQL

时间:2013-04-26 23:06:47

标签: mysql sql postgresql

我正在开发一个项目,这是一种分布式数据库的东西。

我开始创建概念架构,并且我已经对表进行了分区,以便我可能需要在MySQL和PostgreSQL中的表之间执行连接。

我知道我可以编写某种中间件来分解SQL查询并发出针对单个数据库的子查询,并将它们合并到结果中,但我想尽可能使用SQL来做这件事。

到目前为止,我的搜索产生了this(MySQL的联合存储引擎),但它似乎适用于MySQL数据库。

如果有可能的话,我会欣赏一些关于要看什么的指针,最好是在Python中。

感谢。

4 个答案:

答案 0 :(得分:1)

设置可能需要一些时间,但 PrestoDB 是一个值得考虑的有效开源解决方案。

https://prestodb.io/

你使用 JDBC 连接到 Presto,向它发送 SQL,它解释不同的连接,分派到不同的源,然后在返回结果之前在 Presto 节点上做最后的工作。

答案 1 :(得分:0)

SQL无法实现这一点。

您可以选择编写自己的“中间件”,如您所暗示的那样。要在Python中执行此操作,您将使用两个数据库的标准DB-API驱动程序并编写单个查询;然后合并他们的结果。像sqlalchemy这样的ORM将有很长的路要走。

另一种选择是使用集成层。有很多选择,但是,我所知道的都不是用Python编写的。 mule esbapache servicemixwso2jboss metamatrix是一些比较受欢迎的广告。

答案 2 :(得分:0)

从postgres方面,您可以尝试使用mysql_ftw,例如{{1}}(foreign data wrapper)。然后可以通过各种Postgres客户端运行具有联接的查询,例如psql,pgAdmin,example(对于Python)等。

答案 3 :(得分:0)

您可以将数据并置在单个 RDBMS 节点(例如 PostgreSQL 或 MySQL)上。

两种主要方法

  1. 只读 - 您可能希望使用两个源系统的只读副本,然后使用一个进程将数据复制到一个新的可写聚合节点;或
  2. 主 - 您可以选择 2 个主数据库。使用转换过程(例如 ETL 或现成的表级复制)将数据从一个数据库移动到主数据库

然后你可以像往常一样在一个带有 JOIN 的 RDBMS 上运行查询。

奖励:您还可以从可以通过 Kafka 传送日志的 RDBMS 读取日志。您可以根据需要使其变得非常复杂。