将大型论坛数据从一个系统迁移到另一个系统
Posted
技术标签:
【中文标题】将大型论坛数据从一个系统迁移到另一个系统【英文标题】:Migrating large forum data from one system to another 【发布时间】: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。如果有人可以为我转换它或告诉我如何转换,我很乐意这样做。它显然没有一个正确的答案,所以它可能应该这样标记。
【问题讨论】:
【参考方案1】:PHP 可以与 SQLServer 对话吗? 是的 link here
【讨论】:
太棒了,非常感谢您的链接。虽然我更喜欢使用 Java 而不是 PHP,但将所有代码保持在一种语言中更为重要。【参考方案2】:您要做的第一件事是将数据库的数据结构与您将使用的 CMS 进行比较,然后您可以确定哪些字段可以更改、更改等。
我假设您会转储整个 sql,大多数情况下,它会带您搜索和替换以更改数据类型或表名,以便在导入时获得更好的兼容性。
此外,您可能想查看http://php.net/manual/en/book.mssql.php 关于您的 php 与 mssql 问题。这可以为您省去很多麻烦。
【讨论】:
将整个表作为 SQL 转储到磁盘然后运行搜索和替换可能不是我要走的方向。感觉就像我在转义数据方面遇到了太多问题,并且需要能够将旧 ID 映射到新 ID(即,在插入线程/帖子时,知道新的用户 ID)。以上是关于将大型论坛数据从一个系统迁移到另一个系统的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 中使用 South 将数据从一个模型迁移到另一个模型?