【问题标题】:How to Sync Two Different Databases with Millions of Rows and Different Column Structure如何同步具有数百万行和不同列结构的两个不同数据库
【发布时间】:2019-09-01 23:37:45
【问题描述】:

我在两个不同的数据库(一个是Oracle,另一个是Postgresql)之间的数据库同步有一些问题,这两个数据库位于两个不同的位置(即两个不同的物理位置或地理位置),平均互联网速度约为 1Mb/s

这是问题所在,假设我有以下表格:

  1. Oracle DB 中的 tableORC(该表实际上包含 数百万 行),并且

  2. Postgresql DB 中的 tablePG(此表实际上包含 数十万 行)

这两个表(在不同的数据库中)会有不同的列结构,下面是这些表的结构:

tableORC

+-----------------+-------------+--+--+--+
| serial_26_chars | description |  |  |  |
+-----------------+-------------+--+--+--+
|                 |             |  |  |  |
+-----------------+-------------+--+--+--+

tablePG

+----+------+--+--+--+
| id | desc |  |  |  |
+----+------+--+--+--+
|    |      |  |  |  |
+----+------+--+--+--+

tableORC 将始终从许多应用程序/API 中获得 time-series 更改,即几乎每一秒都会对 tableORC 进行 CRUD 操作,我的目标是使 tablePG 始终与 tableORC 保持同步,即:

  1. 如果一个 serial_26_chars 行最初存在但随后被删除,那么与 serial_26_chars 具有相同值的 id 也会从 tablePG 中删除。

  2. 如果一行上的description 得到更新,那么对应的iddesc 也将从tablePG 更新。

  3. 如果最初创建了一个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


【解决方案1】:

您必须在 postgres 服务器中实现 Web 服务以进行更新更改。

第一个选项:对于来自 oracle 服务器的每个操作 第二种选择:每天一次查阅 oracle 服务器中的重做日志更改。

您可以在 oracle 服务器中使用 Pentaho Data Integration 之类的工具来查询数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2022-12-06
    • 2021-05-11
    相关资源
    最近更新 更多