2011-08-23 98 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

相關問題