2013-04-29 185 views
2

我正在尝试为我的问题找到解决方案。问题陈述如何比较来自两个不同数据库的数据?

  1. 我有两个不同的DB的Oracle和AS400。两个数据库都有相同的结构和相同的表格(但明显不同的表格名称)。
  2. AS400通过互联网进行更新,Oracle通过商店或仓库进行更新。
  3. 这两个DB都是每天同步的,同步后我们需要每天生成一个报告以确定数据是否有差异。
  4. 比较需要从双方完成首先从AS400获取数据并与Oracle DB进行比较,反之亦然。
  5. 我们在这里谈论1000万条记录。第一次是整个数据库比较,后面的报告将只在记录被更改或新添加到数据库(这是相当简单和容易照顾),但第一次比较是我们试图实现。

我知道ETL过程会让工作变得简单,但我们没有ETL工具,所以试图使用Java找到解决方案。任何可以帮助我们的建议都非常感谢。

在此先感谢。

+0

1)在Java中使用Joda库和日期算术对于你来说是一件轻而易举的事情。 2)使用批处理来获取记录,并且数据库中的命中数最少。 – Satya 2013-04-29 13:25:02

+0

@BBBZone **这两个数据库每天同步,同步之后,我们需要每天生成一个报告,以了解数据是否存在差异。** - 对此声明有一点澄清。同步后,两个数据库将具有相同的数据权限。AS400中的数据将在oracle中进行更新,并且oracle数据将在AS400中进行更新。那么比较的需要是什么? – VKPRO 2013-04-29 13:37:02

回答

0

简单的方法是创建了两个数据源,每家商店获取数据并进行比较。

当然你的内存将炸毁了10万人次的纪录,所以也许尝试抓取和数据批量比较(注意,而这样做发生更新)

如果你使用多线程

进一步的性能提升可能会获得

0

如果您担心初始比较的内存消耗,为什么不考虑使用某种形式的记录数据散列。假设一个体面的主键(例如长)和SHA-1摘要,这意味着每个记录4 + 20 = 24个字节,或者每个数据库大约200Mb。

0

这两个数据库都是每日同步的,同步后我们需要每天生成一个报告以确定数据是否有差异。

根据完成同步的方式,您可能只能抓取输入到Oracle数据库和AS400数据库的日常事务。处理这些日常事务文件比处理两个整个数据库要快得多。

如果没有每日交易文件,那么这是您的第一步。创建每日交易文件。

相关问题