2012-02-22 53 views
6

我們正在使用MongoDB(在Linux上)作爲我們的主數據庫。但是,我們需要定期(例如,每晚)將Mongo的一些集合導出到MS SQL服務器以運行分析。將mongo集合導出到SQL Server的最佳實踐

我想到了以下方法:

  1. 備份Mongo的數據庫(可能從副本)使用mongodump
  2. 將數據庫恢復到Windows機器,其中蒙戈是istalled
  3. 編寫自定義使應用程序從Mongo中導入集合到SQL中(可能處理任何所需的規範化)。
  4. 在Windows SQL Server安裝上運行分析。

還有沒有其他的「試過,真的」的替代品?

感謝, 斯特凡諾

編輯:對於4點,分析應SQL服務器,而不是蒙戈上運行。

+1

你的腳步聽起來很好。另一種方法是在原始機器上導入到MySQL,執行SQL轉儲,然後在Windows機器上導入SQL(假設它們之間都是標準SQL)。無論哪種方式都有效,取決於您希望在原始服務器上使用MySQL還是在目標服務器上使用Mongo。 – 2012-02-22 09:11:11

回答

3

總體看起來不錯,但我可以建議兩件事情:

  1. 跳過備份/恢復步驟,直接從Linux的MongoDB中讀取數據,因爲這將是越來越難備份/恢復數據庫,因爲它會增加。
  2. 而不是定製的應用程序使用Quartz.net夜間出口,它很容易使用,並可以解決任何其他日程安排任務。

此外,我可以建議看看cqrs and event sourcing這樣的新方法,這基本上可以避免出口任務。您只需處理消息並將數據存儲到兩個數據源(linux mongodb,windows sql server)中即可實現小延遲,甚至可以分析消息中的數據並存儲到mongodb中。

+0

直接從活動實例中讀取數據可能會損害數據完整性(特別是如果操作跨越幾分鐘),是不是有可能?如果拷貝過程中數據發生了變化,該怎麼辦? – 2012-02-22 10:00:07

+0

@StefanoRicciardi:我看不出在讀取數據時如何破壞數據完整性。即使你讀了5天。在閱讀數據時發生變化是可以的,無論如何,您都會對陳舊的數據運行分析。 – 2012-02-22 11:23:43

+0

事實上,我關心的是_target_數據的完整性,而不是來源。假設我正在清理集合A,其中一個項目引用了集合B中的一個項目b。同時b從源代碼中刪除,當我準備好複製集合B時,項目b不再存在。 – 2012-02-22 14:01:34