2011-08-23 100 views
2

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

值得注意的是:

  • 原系统采用微软的SQLServer。新系统使用MySQL(模式不相似)
    • PHP可以与SQLServer交谈吗?如果不是,可能使用Java进行迁移,因为它可以与两者进行通信? (新系统用PHP编写的,我们希望把所有的代码在一个语言,如果可能的话)
  • 的数据量为1300万个职位和650K成员
    • 如果订单上必要的话,我们可以修剪成员(删除那些在过去X年未登录并且没有活动线程中的帖子)
    • 如有必要,我们可以修剪线程(删除那些没有新帖子的线程在过去的X年)
    • 即使修剪后,我们仍然可能有大约750万个帖子的订单

的东西的事情,我认为可能会导致问题包括:

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

我当前的想法是例如:

  • 添加一个old_user_id列新的数据库用户表
  • 从旧数据库迁移的用户,把他们原来的用户名在新列
  • 负载线从旧数据库中X的批次,并把它们插入到新的数据库,使用old_user_id -> new_user_id在用户表中映射
  • 迁移用户时,按照创建日期的顺序加载它们并跟踪最近的日期(在另一个数据库表中)。这将允许系统在下次运行时停止它的位置
  • 同样的事情适用于线程
  • 运行迁移时,首先获取“在存储日期之前创建但在其后进行修改”的所有内容“并用修改后的信息更新数据库中的记录。一旦完成,处理从那时起创建的东西

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

编辑:我想不出如何使这个wiki。如果有人能为我转换或告诉我如何,我会很乐意这样做。它显然没有一个单一的,正确的答案,所以它可能应该被标记为这样。

回答

3

PHP可以与SQLServer交谈吗? link here

+0

这太棒了,非常感谢链接。虽然我更喜欢使用PHP来处理Java,但将所有代码保留为单一语言更为重要。 – RHSeeger

1

首先你必须做的一件事是比较你会使用你的数据库相对于CMS的数据结构,那么你就可以决定哪些字段可以改变的,改变并且这样的。

我认为你会转储整个SQL,主要是,它会带你搜索和替换更改数据类型或表名称,以便导入时更好的兼容性。

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

+1

将整个表格作为SQL转储到磁盘,然后运行搜索和替换可能不是我要去的方向。这感觉就像我遇到了太多与转义数据相关的问题,并且需要能够将旧的ID映射到新的(即插入线程/帖子时,知道新的用户ID)。 – RHSeeger

相关问题