【问题标题】:Using DTO Pattern to synchronize two schemas?使用 DTO 模式同步两个模式?
【发布时间】:2010-01-14 15:54:33
【问题描述】:

我需要同步两个数据库。 这些数据库存储相同的语义对象,但在两个数据库中物理上不同。

我打算使用 DTO 模式来统一对象表示:

DB ----> DTO ----> MAPPING (Getters / Setters) ----> DTO ----> DB

我认为这比在每一端使用 SQL Query 进行物理同步更好,我使用 hibernate 添加抽象和同步对象。

你认为这是个好主意吗?

【问题讨论】:

  • 我不理解“相同的语义对象但物理上不同”。这太模棱两可了。请技术。您的意思是“具有相同 DDL 但内容不同的表”还是“具有不同 DDL 但内容相同的表”?正确答案很大程度上取决于此。
  • 语义内容相同,但DDL不同。这是一个 M2M(模型到模型)转换问题。

标签: database hibernate synchronization dto


【解决方案1】:

上面对 Hitchhiker's Guide 的很好参考。

我的两分钱。您需要考虑使用正确的工具来完成这项工作。虽然编写自定义代码来解决这个问题很有吸引力,但已经有许多工具可以为您做到这一点,将源映射到目标,执行从属性到属性的自定义转换,并且很可能会以更快的上市时间交付。

查看 ETL 工具。我不熟悉开源社区中可用的工具,但如果你倾向于那个方向,我相信你会找到一些。您可能会查看的其他工具有:Informatica、Data Integrator、SQL Server Integration Services,如果您正在处理空间数据,还有另一个称为 Alteryx。

提姆

【讨论】:

    【解决方案2】:

    使用 ORM 执行此操作可能比精心设计的 SQL 脚本慢一个数量级。这取决于数据库的大小。

    编辑

    我要补充一点,决定应该取决于两种模式之间的差异量,而不是您对 SQL 的专业知识。 SQL 是如此普遍,以至于开发人员应该能够以简洁的方式编写简单的脚本。

    SQL还有一个好处就是大家都知道怎么运行脚本,但不是每个人都知道怎么运行你的自定义工具(这是我在实践中遇到的问题,如果迁移是由其他人实际操作的)。

    1. 对于只有略有不同的模式(例如名称或列值的简单转换),我会选择 SQL 脚本。这可能更紧凑,更易于使用和交流。

    2. 对于具有主要差异的模式,数据组织在不同的表中或复杂的逻辑以将一些值从一个模式映射到另一个模式,那么专用工具可能是有意义的。编写工具的最初努力可能更重要,但一旦创建它就可以成为一种资产。

    您还应该考虑非功能性方面,例如异常处理、错误记录、在较小的事务中拆分工作(因为数据太多)等。

    1. 在这种情况下,SQL 脚本确实会变得“混乱”。如果您有这样的限制,SQL 将需要高级技能并且往往难以使用和维护。

    2. 自定义工具可以演变成 mini-ETL,能够将工作分块到小事务中,很好地管理和记录错误等。这是更多的工作,并且可以成为一个专门的项目。

    决定权在你。

    【讨论】:

    • 感谢您的回答。我的情况是双方的数据太不同了,我首先开发了一个迁移工具。模式差异是我想对数据使用物理抽象的事实。也可以评估数据量,这取决于。我目前正在研究使用 Talend 软件的 ETL 解决方案可能会有所帮助。再次感谢您的回答。问候。
    【解决方案3】:

    我以前做过,我认为这是在 2 个 DB 之间进行映射的一种非常可靠且直接的方式。唯一的缺点是,每当数据库发生变化时,我都必须更新映射逻辑,但这通常很简单。

    【讨论】:

    • 是的,我也意识到了这一点,但我认为更新 hbm 文件(通过休眠同步器)比更新暗 sql 脚本更容易。
    • “暗 sql 脚本”?这是声明式编程,而不是黑魔法! :)
    • 我知道,但从我的角度来看,这不是解决方案。 “黑暗”不是一个好选择,也许“凌乱”是最好的^^。我认为这是同步语义对象的好方法,而不是它们的物理表示,这就是为什么使用休眠来拥有对象。但是我需要建议才能做出决定,这就是为什么我在这里问这个问题(当然答案不是 42)。
    猜你喜欢
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 2011-11-28
    • 1970-01-01
    相关资源
    最近更新 更多