将大型论坛数据从一个系统迁移到另一个系统

时间:2011-08-23 19:40:34

标签: java php mysql sql-server database

我需要将一个相当大的论坛安装从一个系统(自定义,MS SQLServer)迁移到另一个系统(vbulletin,MySQL)。目标系统有许多不同的导入脚本,我计划从中查看以获取想法,但我希望我可以在这里获得一些有关它的一些方面的建议。

值得注意的是:

  • 原始系统使用Microsoft SQLServer。新系统使用MySQL(模式不相似)
    • PHP可以与SQLServer通信吗?如果没有,也许可以使用Java进行迁移,因为它可以与两者进行通信? (新系统是用PHP编写的,如果可能的话,我们希望用一种语言保存所有代码)
  • 数据量约为1300万个帖子和650,000个成员
    • 如有必要,我们可以修剪成员(删除那些在过去X年中没有登录但在活动主题中没有帖子的成员)
    • 如果有必要,我们可以修剪线程(删除过去X年没有新帖子的线程)
    • 即使在修剪之后,我们仍然可能拥有750万个帖子

我认为可能导致问题的事情包括:

  • 我不确定我是否可以在新系统中保留旧系统中的ID(消息或用户)。
  • 我显然无法将所有13m记录从旧数据库加载到内存中,处理它们,然后写入新数据库
  • 我希望以后能够运行第二次数据迁移以获取自原始导入以来的任何新数据(因此我们可以针对主数据库的备份运行长时间运行的导入,然后在运行“其他所有”导入时是时候关掉旧系统了)

我目前的想法是做一些事情:

  • old_user_id列添加到新数据库用户表
  • 从旧数据库迁移用户,将其原始用户ID放在新列
  • 使用用户表中的old_user_id -> new_user_id映射将批量X中的旧数据库中的线程加载到新数据库中
  • 迁移用户时,按创建日期的顺序加载它们并跟踪最近的日期(在另一个db表中)。这将允许系统在下次运行时从中断处继续运行
  • 同样适用于线程
  • 运行迁移时,首先获取“在存储日期之前创建但在其之后修改”的所有内容,并使用修改后的信息更新数据库中的记录。完成后,处理从那时起创建的内容

我为这样一个开放式问题道歉。涉及的因素很多,而且我还没有具体的问题。我真的只是在寻找那些过去可能不得不处理类似事情的人的想法/建议。关于处理事情的最佳方法,我缺少的事情或我应该注意的边缘案例的任何想法。

编辑:我无法弄清楚如何将其作为维基。如果有人可以为我转换或告诉我如何,我很乐意这样做。它显然没有一个正确的答案,所以它可能应该被标记为。

2 个答案:

答案 0 :(得分:3)

PHP可以与SQLServer通信吗? link here

答案 1 :(得分:1)

您要做的第一件事是比较数据库的数据结构与您将使用的CMS,然后您可以确定哪些字段可以更改,更改等等。

我假设您将转储整个sql,主要是,它会带您进行搜索并替换更改数据类型或表名,以便在导入时获得更好的兼容性。

此外,您可能想查看有关您的php vs mssql问题的http://php.net/manual/en/book.mssql.php。这可以为你节省很多麻烦。