将糟糕的系统迁移到我们当前的系统中,其中包含大量数据


Migrating bad system into our current system with tons of data

当我的公司收购另一家公司时,我继承了一个系统。这个系统是LAMP和.NET.的混合体

  1. 1运行asp.net的Windows服务器,该服务器控制仅用于api和Web服务的第三方验证-(我们称之为WIN)
  2. 8个LAMP服务器(web、报表、cron、存储库等)-(让我们称之为NEW)

我们目前的环境:

14 LAMP服务器(网络、邮件、存储库等)-(让我们称之为CURRENT)

好消息是,新的代码非常简单。几百万行代码(大多数是api,第三方),我可以将其转换为CURRENT系统。NEW和CURRENT都使用Cento,这将使转换变得容易,除了Windows服务器,我现在不知道该怎么办。

现在坏消息来了。NEW系统数据库模式一点也不好。它没有规范化,查询速度很慢(数据库查询和代码也是如此)。我的第一个想法是将它们重新设计为一个更规范的结构,与CURRENT代码匹配,但我不工作。新系统中的表格是巨大的。新系统有7个数据库,超过10000个表,最小的表有超过10万行,有些表有超过5亿行。其中一个数据库拥有大多数表,每个表的行数超过2500万。

迁移安全吗?还是应该让两者都运行?如果我应该迁移,我想知道什么是对我来说最安全的解决方案,以便将Windows和NEW系统迁移到我的CURRENT系统中?

首先,将WIN+NEW系统迁移到CURRENT系统需要时间。因此,您必须确保当您开始迁移/转换所有内容时,您知道要去哪里。迁移可能不是一项容易的任务,而且在启动过程后,您可能会遇到从未想过的问题。

您迁移新系统的想法有优缺点,您需要确保它顺利进行,以便最终获得一个好的、可靠的产品。

优点:

  • 只需要维护一个系统:您不想维护3个系统
  • 一个代码/数据库环境:PHP与ASP.NET,MSSQL与MySQL
  • 集中式代码/数据库
  • 一个编码(代码和数据库)标准
  • 保存/出售设备(你将把代码迁移到你的14台服务器上,也许你不需要其他9台(WIN+NEW),所以你可以为下一个项目出售或保留它们)

缺点:

  • 风险更高(崩溃、不兼容、需要了解的未知功能等)
  • 比迁移或重新设计任何东西都便宜
  • 失败的风险低于迁移(因为您已经知道这两个系统都可以工作)
  • 规划、控制、实施、质量保证:如果其中一项失败,那就非常糟糕
  • 昂贵:迁移可能在时间和金钱上都很昂贵

这是一个庞大的数据库,更改/优化它需要在工时方面进行大量投资。这不是你几个小时就能轻易做到的。这可能需要数周甚至数月的时间才能成功地将数据迁移到CURRENT系统而不会出现错误。如果可以的话,您可以从两个数据库模式(如客户端或产品)中迁移共同点或相似点开始。通过这种方式,您可以导入CURRENT系统可以在没有错误的情况下运行的数据,并且您的代码也可以识别这些数据。CURRENT系统的用户可以立即开始管理这些项目/记录,而不会出现问题。对于CURRENT系统无法识别的新表或记录,您可以简单地重新设计这些表并将其迁移到CURRENT(然后更新当前代码)系统。

至于代码迁移,如果新系统中的代码足够好,并且符合您的标准,您可以保留它。这将节省开发时间,只需确保更新查询和服务器连接即可。另一方面,如果它像意大利面条代码,你必须了解代码的作用。这也可能需要在工时上进行大量投资。我可以在这里建议将这个标准化,并像在CURRENT上组织代码一样组织代码。您可以使用通用文件和文件夹结构将代码集中在一个通用文件夹中。你可以把你所有的公共库,第三方等等放在那里,所以当你调用CURRENT和NEW代码时,它会加载相同的PHP类。这将使您从新系统轻松过渡到当前系统。这样,你就可以在同一个地方了解所有需要的文件,而且很容易维护。特别是如果您的代码需要需要需要文件的必需文件。如果你的代码都在你的服务器上,如果你喜欢这个想法,你可以创建一个NFS。

现在,我可以建议的是从平行收养开始。通过这种方式,您可以确保所有系统都正常工作并且健康。然后慢慢地将数据/代码迁移到CURRENT系统,直到一切都完成。这并不容易,你必须确定你必须首先迁移NEW+WIN系统的哪一部分。我的建议是迁移WIN系统。因为这与CURRENT和NEW系统无关,所以只要显示相同的输出,就应该没问题。在PHP中搜索开源或类似的验证,如果找不到,请构建它们。通过这种方式,WIN系统可以很容易地迁移到您当前的组织结构和编码标准中。执行测试和质量保证将很容易,而且您可以很快完成。

一旦迁移了此WIN,您需要确定需要首先传输到CURRENT系统的内容。例如,如果NEW和CURRENT系统有"客户端",则从NEW系统收集所有信息,并使用脚本(手动或脚本化)将其移动到CURRENT。然后,您可以迁移客户端元素,如产品、账单或与这些客户端相关的任何其他记录)。重复这些步骤,直到迁移完所有数据。这样,您就不必重新设计任何表格或更改NEW系统中的任何代码,所有内容都保存在CURRENT系统中,并且一切正常。

我不建议在这种情况下采用大爆炸。

是否应该迁移并不是你的决定,更多的是你的老板的决定。

至于如何处理,这取决于你需要做的数据处理量。我显然建议使用数据库间语句处理从SQL到SQL的数据,但这并不总是可行的。

第一个原因是,您可能需要将非常复杂的数据转换为另一种形式,而不能使用纯SQL。

第二个问题是,如果用PHP或任何其他语言编写传输脚本比用纯SQL编写传输脚本需要花费同样多的精力,那么最好用PHP编写,这样当你有什么需要更改时,你就可以确信它是可能的,而不必拘泥于使用SQL并需要重新编写所有内容的事实。

总的来说,你需要做大量的分析来了解你正在处理的所有数据,并计划你的转移。考虑到你所说的桌子和行的数量,你还有一次地狱般的旅行,我认为tylenol将是你最好的朋友。

祝好运