【发布时间】:2019-09-01 23:37:45
【问题描述】:
我在两个不同的数据库(一个是Oracle,另一个是Postgresql)之间的数据库同步有一些问题,这两个数据库位于两个不同的位置(即两个不同的物理位置或地理位置),平均互联网速度约为 1Mb/s。
这是问题所在,假设我有以下表格:
Oracle DB 中的 tableORC(该表实际上包含 数百万 行),并且
Postgresql DB 中的 tablePG(此表实际上包含 数十万 行)
这两个表(在不同的数据库中)会有不同的列结构,下面是这些表的结构:
tableORC:
+-----------------+-------------+--+--+--+
| serial_26_chars | description | | | |
+-----------------+-------------+--+--+--+
| | | | | |
+-----------------+-------------+--+--+--+
tablePG:
+----+------+--+--+--+
| id | desc | | | |
+----+------+--+--+--+
| | | | | |
+----+------+--+--+--+
tableORC 将始终从许多应用程序/API 中获得 time-series 更改,即几乎每一秒都会对 tableORC 进行 CRUD 操作,我的目标是使 tablePG 始终与 tableORC 保持同步,即:
-
如果一个
serial_26_chars行最初存在但随后被删除,那么与serial_26_chars具有相同值的id也会从tablePG中删除。 如果一行上的
description得到更新,那么对应的id的desc也将从tablePG更新。-
如果最初创建了一个
serial_26_chars行,那么与serial_26_chars具有相同值的id也会在tablePG上新创建。
并考虑到在一秒钟内,tableORC 上确实有 数千 次 CRUD 操作,我希望与 tablePG 的同步发生在互联网上的几秒钟内(不同的服务器位置)。
供您参考,tableORC 托管在企业级服务器上,而tablePG 托管在消费级标准台式电脑上。
那么如何解决这个问题呢?你能给我一些解决这类问题的方法吗?
谢谢。
【问题讨论】:
-
我知道您可以在 oracle 服务器上设置触发器以使用 ODBC 将数据推送到 postgres 服务器,尽管我自己从未使用过它。但是,性能将受到您的连接的限制;您还可以在 oracle 服务器中有一个附加表来存储在该表中进行的每个操作,这样可以更轻松地查找删除和更新。
-
你可以试试symmetricds.org
-
我会在 PostgreSQL 中使用 oracle_fdw 外部表。这样 PostgreSQL 表上的查询和数据修改将被重定向到 Oracle,PostgreSQL 中没有数据,并且表始终完美同步。如果您只想查看部分数据,可以在 PostgreSQL 中使用视图。
标签: database oracle postgresql