Seb*_*oli 6 database language-agnostic migration oop design-patterns
(这个问题是关于临时和编程地保持两个数据库的新记录同步,具有非常不同的模式,忽略旧的过时和不再需要的记录的最佳方法.)
我在一家为导游,报纸和网站提供电视节目信息的公司工作.
我有一个旧系统,有一些限制,正在被一个新系统取代.
不同的客户端以不同的格式(xml,sql,txt,甚至是打印就绪的PDF)以不同的方式(推送,拉取,部分转储,简单导出,人工辅助导出 - 像PDF版本等)获取数据.一些出口产品每月生产一次,其他出口产品每天生产一次.
问题是几个客户端必须依赖旧系统中的数据,直到新系统完全开发和加载,并且维护数据的人员不能同时使两个数据库同步,因为这需要大量的额外工作,但考虑到项目的规模,过夜切换系统似乎是不可能的.
我们不希望将旧数据库中的数据全部输入到新数据库,因为大部分数据已经没有必要,并且有大量垃圾(即具有不同细节级别的重复记录,旧的空气信息我们只需要作为档案).
我们希望在两个数据库中插入新记录,并将旧编辑的记录复制到新数据库中.
我们即将开始使用Symfony和Doctrine开发新系统,我决定我们可以设计一组ORM"代理"类,它们应该具有与简单的Doctrine ORM类集相同的接口,但保留同步在另外两组类之间(与新系统接口的类和与旧系统接口的类).最终旧数据库应该与代理类一起丢弃,并且直接连接到新数据库的Doctrine ORM类应该占用该位置,就像旧系统永远不存在一样.
这是一个很长的镜头,我对这种方法并不完全有信心.
有没有人有这种项目的经验?
您是否知道这种方法中存在任何常见的陷阱,或者其他一些可能适合这种情况的解决方案?
我不确定是否有一种方法可以完成此任务,我只能建议您在开始迁移数据之前应该全面测试新数据库,一旦您确定它可以正常工作,我建议您编写一些迁移应用程序会查询要从旧数据库导出的所需数据,您不必(但应该)调试旧数据库中的数据,如果新数据库工作,则重复的数据应被限制忽略。
我曾经在一家不关心此类问题的公司工作,最后却变得一团糟,一个接一个的补丁,大喊大叫和不必要的压力。我知道……悲伤。