【发布时间】:2011-11-02 06:08:24
【问题描述】:
我需要将相当大的论坛安装从一个系统(自定义、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从旧数据库加载线程,并将它们插入到新数据库中 - 迁移用户时,按创建日期顺序加载它们并跟踪最近的日期(在另一个数据库表中)。这将允许系统在我们下次运行时从中断处继续
- 同样适用于线程
- 运行迁移时,首先获取“在存储日期之前创建,但在该日期之后修改”的所有内容,并使用修改后的信息更新数据库中的记录。完成后,处理从那时起创建的东西
对于这样一个开放式问题,我深表歉意。涉及很多因素,这真的不是我有具体问题的问题。我真的只是在寻找过去可能不得不处理类似事情的人们的任何想法/建议。关于处理事情的最佳方式、我遗漏的事情或我应该注意的极端情况的任何想法。
编辑:我不知道如何使它成为一个 wiki。如果有人可以为我转换它或告诉我如何转换,我很乐意这样做。它显然没有一个正确的答案,所以它可能应该这样标记。
【问题讨论】:
标签: java php mysql sql-server database