1

There's a project I'm working on, kind of a distributed Database thing.

I started by creating the conceptual schema, and I've partitioned the tables such that I may require to perform joins between tables in MySQL and PostgreSQL.

I know I can write some sort of middleware that will break down the SQL queries and issue sub-queries targeting individual DBs, and them merge the results, but I'd like to do do this using SQL if possible.

My search so far has yielded this (Federated storage engine for MySQL) but it seems to work for MySQL databases.

If it's possible, I'd appreciate some pointer's on what to look at, preferably in Python.

Thanks.

4

4 回答 4

1

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

https://prestodb.io/

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

于 2021-02-06T16:15:27.487 回答
0

从 postgres 方面,您可以尝试使用外部数据包装器,例如mysql_ftw( example )。然后可以通过各种 Postgres 客户端运行带有连接的查询,例如 psql、pgAdmin、psycopg2(用于 Python)等。

于 2013-04-26T23:53:26.970 回答
0

这在 SQL 中是不可能的。

您的选择是按照您的暗示编写自己的“中间件”。要在 Python 中做到这一点,您需要为两个数据库使用标准 DB-API 驱动程序并编写单独的查询;然后合并他们的结果。像 sqlalchemy 这样的 ORM 将在很大程度上提供帮助。

另一种选择是使用集成层。那里有很多选择,但是,据我所知,没有一个是用 Python 编写的。mule esbapache servicemixwso2jboss metamatrix是一些比较流行的。

于 2013-04-26T23:13:18.493 回答
0

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

两种主要方法

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

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

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

于 2021-02-06T16:20:09.447 回答