使用大量数据将不良系统迁移到我们当前的系统中[关闭]
Posted
技术标签:
【中文标题】使用大量数据将不良系统迁移到我们当前的系统中[关闭]【英文标题】:Migrating bad system into our current system with tons of data [closed] 【发布时间】:2012-02-06 09:22:37 【问题描述】:当我的公司收购另一家公司时,我继承了一个系统。该系统是 LAMP 和 .NET 的混合体。
-
1 个运行 asp.net 的 Windows 服务器,它控制仅用于 api 和 web 服务的第三方验证 -(我们称之为 WIN)
8 个 LAMP 服务器(Web、报告、cron、存储库等...)-(我们称之为 NEW)
我们目前的环境:
14 个 LAMP 服务器(网络、邮件、存储库等)-(我们称之为 CURRENT)
好消息是新代码非常直接。几百万行代码(大部分是 apis,第三方),我可以将其转换为 CURRENT 系统。 NEW 和 CURRENT 都使用 CentO,这将使转换变得容易,除了我现在不知道该怎么做的 Windows 服务器。
现在是坏消息。新的系统数据库模式一点都不好。它没有标准化并且查询很慢(数据库查询和代码也是)。我的第一个想法是将它们重新设计为与当前代码匹配的更规范化的结构,但我不工作。新系统中的表是巨大的。 NEW 系统有 7 个数据库,超过 10000 个表,最小的表有超过 10 万行,有些表有超过 5 亿行。其中一个数据库包含大多数表,每个表有超过 2500 万行。
迁移是否安全,或者我应该同时保持两者运行?如果我应该迁移,我想知道将 Windows 和 NEW 系统迁移到我当前系统中最安全的解决方案是什么?
【问题讨论】:
【参考方案1】:首先,将 WIN + NEW 系统移动到 CURRENT 系统需要时间。所以你必须确保当你开始迁移/转换所有东西时,你知道你要去哪里。迁移可能不是一件容易的事,而且您可能会遇到在开始迁移后从未想过的问题。
您迁移新系统的想法有利有弊,您需要确保其顺利进行,以便最终获得优质可靠的产品。
优点:
只需要维护一个系统:您不想维护 3 个系统; 一个代码/数据库环境:php vs ASP.NET 和 MSSQL vs mysql; 集中式代码/数据库; 一种编码(代码和数据库)标准; 保存/出售设备(您将代码迁移到您的 14 台服务器,也许您不需要其他 9 台(WIN+NEW),因此您可以出售或保留它们用于下一个项目)缺点:
风险较高(崩溃、不兼容、您需要了解的未知功能等); 比迁移或重新设计所有东西更便宜 失败的风险低于迁移(因为您已经知道这两个系统都可以正常工作) 计划、控制、实施、质量保证:如果其中一项失败,则非常糟糕; 昂贵:迁移可能会耗费大量时间和金钱;这是一个大型数据库,更改/优化它需要大量的工时投资。这不是您可以在几个小时内轻松完成的事情。这可能需要数周甚至数月才能成功地将数据迁移到当前系统而不会出现错误。如果可以,您可以先从两个数据库模式(如客户端或产品)迁移共同点或相似点。这样,您可以导入 CURRENT 系统可以正常运行且您的代码可以识别的数据。您当前系统的用户可以立即开始管理这些项目/记录而不会出现问题。对于您的 CURRENT 系统无法识别的新记录或记录,您可以简单地重新设计这些表并将它们迁移到 CURRENT 系统(然后更新您当前的代码)。
在代码迁移时,如果来自 NEW 系统的代码足够好并且符合您的标准,您可以保留它。这将节省开发时间,只需确保更新查询和服务器连接即可。另一方面,如果它像意大利面条代码,您将必须了解代码的作用。这也可能需要大量的工时投资。我可以在这里推荐将这个标准化,并以与在当前代码上组织代码相同的方式组织代码。您可以使用通用文件和文件夹结构将代码集中在一个通用文件夹中。您可以将所有公共库、第 3 方等放在那里,因此当您调用 CURRENT 和 NEW 代码时,它会加载相同的 PHP 类。这将使您轻松地从 NEW 系统过渡到 CURRENT 系统。这样,您就可以在同一个地方了解所有需要的文件,并且非常易于维护。特别是如果您的代码需要需要文件的必需文件。如果你的代码在你的服务器周围,如果你喜欢这个想法,你可以创建一个 NFS。
现在,我可以建议从 Parallel Adoption 开始。通过这种方式,您可以确保所有系统都正常工作并且健康。然后慢慢将数据/代码迁移到 CURRENT 系统,直到一切都完成。这并不容易,您必须首先确定必须迁移 NEW + WIN 系统的哪个部分。我的建议是迁移WIN系统。因为这独立于 CURRENT 和 NEW 系统,所以只要显示相同的输出就可以了。在 PHP 中搜索开源或类似的验证,如果找不到,请构建它们。通过这种方式,该 WIN 系统可以轻松迁移到您当前的组织结构和编码标准。执行测试和质量保证将很容易,您可以很快完成。
迁移此 WIN 后,您需要先确定需要传输到 CURRENT 系统的内容。例如,如果 NEW 和 CURRENT 系统具有“客户端”,则从 NEW 系统收集所有信息并使用脚本(手动或脚本)将它们移动到 CURRENT 系统。然后,您可以迁移客户元素,如产品、账单或与这些客户相关的任何其他记录)。重复这些步骤,直到迁移所有数据。这样,您不必重新设计任何表格或更改新系统中的任何代码,所有内容都保存在当前系统上并且一切正常。
对于这种情况,我不会推荐big bang adoption。
【讨论】:
【参考方案2】:我应该迁移不是你的决定,而是你的老板决定。
具体方法取决于您需要处理的数据量。我显然会建议使用数据库间语句从 SQL 到 SQL 处理数据,但这并不总是可行的。
第一个原因是您可能需要将非常复杂的数据转换为另一种形式,而使用纯 SQL 无法做到这一点。
第二个,如果用 PHP 或任何其他语言编写传输脚本比用纯 SQL 编写传输脚本需要付出更多的努力,那么最好用 PHP 编写它,这样当你有什么需要改变时'确定这将是可能的,并且不会被您使用 SQL 并且需要重新编码所有内容这一事实所困扰。
总体而言,您需要进行大量分析以了解您正在处理的所有数据并计划您的转移。鉴于您所谈论的表格和行数,您将面临一段地狱般的旅程,我认为泰诺将是您最好的朋友。
祝你好运
【讨论】:
该死,那你就给自己做了一个更艰难的决定;) 是的!我知道,这就是我想在这里问的原因,但我想人们不喜欢这类问题......以上是关于使用大量数据将不良系统迁移到我们当前的系统中[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
使用扩展的JSON将SQL Server数据迁移到MongoDB