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


Migrating large forum data from one system to another

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

值得注意的是:

  • 原系统使用Microsoft SQLServer。新系统使用MySQL(模式不相似)
      PHP可以和SQLServer对话吗?如果没有,也许可以使用Java来进行迁移,因为它可以与两者通信?(新系统是用php编写的,如果可能的话,我们希望所有的代码都用一种语言编写)
  • 数据量约为1300万篇帖子和65万名会员
    • 如果有必要,我们可以删减成员(删除那些在过去X年内没有登录过并且在活动线程中没有帖子的成员)
    • 如果有必要,我们可以修剪线程(删除那些在过去X年内没有新帖子的线程)
    • 即使在修剪之后,我们仍然可能有大约750万篇文章
  • 我认为可能引起问题的事情包括:

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

    我现在的想法是这样做:

    • 添加old_user_id列到新的数据库用户表
    • 从旧数据库迁移用户,将其原始用户id放在新列
    • 使用用户表
    • 中的old_user_id -> new_user_id映射,以X为批从旧数据库中加载线程,并将它们插入新数据库。
    • 迁移用户时,按照创建日期的顺序加载它们,并跟踪最近的日期(在另一个db表中)。这将允许系统在下次我们运行它时从它离开的地方捡起
    • 同样适用于线程
    • 运行迁移时,首先获取"在存储日期之前创建,但在此之后修改"的所有内容,并用修改后的信息更新数据库中的记录。一旦完成,处理自那以后创建的东西
    我为这样一个开放式的问题道歉。这涉及到很多因素,我还没有具体的问题。我真的只是想从过去可能不得不处理类似事情的人们那里寻求任何想法/建议。关于处理事情的最佳方法,我遗漏的东西,或者我应该注意的边缘情况的任何想法。

    编辑:我不知道怎么把这个变成wiki。如果有人可以转换它为我或告诉我如何,我很乐意这样做。它显然没有唯一的正确答案,所以可能应该这样标记。

    PHP可以与SQLServer对话吗?链接这里

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

    我假设您将转储整个sql,大多数情况下,它将花费您搜索和替换更改数据类型或表名,以便在导入时更好地兼容。

    另外,你可能想检查http://php.net/manual/en/book.mssql.php关于你的php vs mssql问题。这样可以省去很多麻烦。