将有大量数据的糟糕系统迁移到我们当前的系统中

12
我在公司收购另一家公司时接手了一个系统,这个系统是LAMP和.NET混合的。

  1. 1个Windows服务器作为asp.net控制第三方验证仅用于API和Web服务 - (我们称为WIN)
  2. 8个LAMP服务器(Web、报表、定时任务、存储库等)- (我们称为NEW)

我们目前的环境:

14个LAMP服务器 (web, 邮件, 存储库等...) - (我们称之为CURRENT)

好消息是NEW代码非常简单。数百万行代码(其中大多数是api, 第三方),我可以转换成CURRENT系统。NEW和CURRENT都使用CentOs,这将使过渡变得容易,除了我不知道该怎么处理Windows服务器。

现在坏消息来了。NEW系统的数据库模式一点也不好。它没有规范化,查询速度很慢(数据库查询和代码)。我的第一个想法是重新设计它们,以更规范化的结构匹配CURRENT代码,但是它不起作用。NEW系统的表格非常庞大。 NEW系统有7个数据库,超过10000个表格,最小的表格有超过100k行,某些表格有超过5亿行。其中一个数据库每个表格都有超过2500万行。

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

2个回答

29

首先,将WIN + NEW系统迁移到当前系统需要时间。所以在开始迁移/转换一切时,您必须确定您的目标。迁移可能并不容易,并且在过程开始后,您可能会遇到一些意想不到的问题。

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

优点:

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

缺点:

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

这是一个很大的数据库,更改/优化它将需要大量的人工投入。这不是您可以在几个小时内轻松完成的事情。为了成功地将数据迁移到当前系统而没有错误,可能需要数周甚至数月的时间。如果可以的话,您可以先从两个数据库模式中共同或相似之处开始迁移,例如客户或产品。这样,您导入可以在CURRENT系统中运行无误的数据,并且您的代码也将予以识别。您CURRENT系统的用户可以立即开始管理这些项目/记录,而无需担心问题。对于CURRENT系统不能识别的新记录,您可以简单地重新设计这些表并将其迁移到CURRENT系统上(然后更新您的当前代码)。

关于代码迁移,如果NEW系统的代码足够好并符合您的标准,您可以保留它。这将节省开发时间,但请确保更新查询和服务器连接。另一方面,如果代码像意大利面条一样混乱,您需要了解代码的作用。这也可能需要大量的人力投入。在这里,我建议将其标准化并以与当前系统相同的方式组织代码。您可以使用公共文件和文件夹结构将代码集中在一个公共文件夹中。您可以将所有的公共库、第三方等放在那里,这样当您调用当前和NEW代码时,它会加载相同的PHP类。这将使您从NEW到CURRENT系统更容易过渡。这样,您就知道所有所需的文件都在同一个地方,并且非常易于维护。特别是如果您的代码需要需要文件,则文件分布在多台服务器上。如果您喜欢这个想法,您可以创建NFS。

现在,我建议您从并行采纳开始。这样,您可以确保所有系统正常运行且健康。然后逐步将数据/代码迁移到当前系统,直到完成所有工作。这并不容易,您必须确定首先要迁移NEW + WIN系统的哪个部分。我的建议是先迁移WIN系统。因为这独立于当前和NEW系统,只要显示相同的输出,您就应该没问题。在PHP中搜索开源或类似的验证,如果找不到,则进行构建。这样,WIN系统可以轻松地迁移到您当前的组织结构和编码标准中。执行测试和质量保证将变得容易,您可以很快完成。

在迁移此WIN之后,您需要首先确定需要转移的内容,转移到当前系统中。例如,如果新系统和当前系统都有"客户",则从新系统中收集所有信息,并使用脚本(手动或脚本化)将它们移动到当前系统中。然后,可以迁移客户元素,如产品、账单状态或任何与这些客户相关的记录。重复执行这些步骤,直到所有数据都被迁移。这样,您就不必重新设计任何表格或更改来自新系统的任何代码,一切都保存在当前系统中,一切都能正常工作。

我不建议对于这种情况采用大爆炸采纳


2
"决定是否迁移并不完全取决于您,而更多地取决于您的老板。至于如何迁移,这取决于您需要处理的数据量。我建议使用数据库间语句将数据从SQL转移到另一个SQL数据库,但这并非总是可行的。首先,您可能需要将非常复杂的数据转换为另一种形式,无法仅使用纯SQL完成。其次,如果在PHP或任何其他语言中编写传输脚本所需的工作量与在纯SQL中完成相同,那么最好使用PHP进行编写,以便在需要更改时确保可以更改而不会陷入您在SQL中需要重新编码的事实中。总体而言,您需要进行大量分析以了解您正在处理的所有数据并计划您的转移。考虑到您所涉及的表格和行数,您面临着一场艰难的旅程,我认为泰诺会成为您最好的朋友。祝你好运。"

那么,你现在面临着更加困难的决定了 ;) - Mathieu Dumoulin
是的!我知道,这就是为什么我想在这里问,但我猜人们不喜欢这种问题... - aki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接