【发布时间】:2014-06-27 16:36:59
【问题描述】:
我的公司从Cerner Multum 获得了一个Microsoft Access 数据库,该数据库需要与我们的生产后端Sybase (12.0.1.3924) 进行区分。虽然我知道现成的数据库差异工具(http://www.diffkit.org/、http://www.liquibase.org/),但似乎没有一个适合我的需要——因此,我决定编写一个 Java 工具来执行这项工作作为证明-概念。
就目前而言,该工具目前正在按设计工作,程序如下:
- 从配置文件中获取要区分的表列表
- 建立与两个后端的连接
- 确保配置文件中的表可以与 MS Access 和 Sybase 匹配
- 如果是这样,请继续比较:
- 对于每个表:
- 从 MS Access 获取一行,通过反射实例化一个对象
- 遍历行中的每一列,将数据填充到新创建的“Access” POJO中
- 使用 Access POJO,为 Sybase 构造查询
- 查询 Sybase:
- 如果结果集为 NULL,则在 Sybase 中插入一条记录
- 如果结果集不为 NULL,则实例化另一个 POJO 并将 Sybase 数据填充到其中。
- 比较两个 POJO:
- 如果 POJO 匹配:什么都不做,继续下一行。
- 如果 POJO 不匹配:使用 Access POJO 中的数据对 Sybase 执行更新
- 对于每个表:
现在如上所述,这目前正在完成工作,尽管是以非常程序化的 单线程 方式,这就是我的问题:区分两者的正确方法是什么数据库(碰巧不相关)以多线程方式?
我在多线程方面有一些经验,但我不确定正确的方法,因为我从未将插入/更新排队。也就是说,我不完全确定排队是正确的方法——批量更新/插入呢?
在这方面有一些经验的人能否就如何解决这个问题提供一些高层次的见解?就目前而言,我在大约 2 小时内处理了超过 150 万行,大约是 200 TPS。非常慢。任何指导将不胜感激,如有必要,我很乐意提供更多信息。
【问题讨论】:
标签: java database multithreading diff