2014-01-28 21 views
9

我們在MongoDB中,我們希望轉移到紅移(自動增量每天的基礎上)的幾個集合。 我們該怎麼做?我們應該將mongo導出到csv嗎?MongoDB的紅移

+2

我認爲如果人們想投票,爲什麼要添加評論會有幫助? –

+0

相關問題在這裏:http://stackoverflow.com/questions/23835567/copying-json-objects-with-multiple-layouts-from-s3-int-redshift –

+0

另一個相關的問題http://stackoverflow.com/questions/ 24878374 /出口JSON數據並加載 - 到 - 一的關係數據庫 –

回答

0

這將有助於瞭解的幾個問題是:

  1. 這是隻添加一個插件始終只能增加增量同步,即數據並沒有更新/刪除或者說你的紅移實例只對增加感興趣?
  2. 數據不一致是由於刪除/更新發生在源頭而沒有被送入redshift實例嗎?
  3. 它是否需要日常增量批處理,或者它是否可以實時發生?

根據您的情況,mongoexport可能適合您,但您必須瞭解它的缺點,您可以在http://docs.mongodb.org/manual/reference/program/mongoexport/找到它的缺點。

0

我不得不解決同樣的問題(不是每天都有)。 as ask mentioned,您可以使用mongoexport來導出數據,但請記住紅移不支持數組,所以萬一您的集合數據包含數組,您會發現它有點問題。

我對這個解決方案是管mongoexport成一個小工具程序我寫的變換mongoexport JSON行到我期望的CSV輸出。 管道輸出也允許您使過程平行。

Mongoexport允許您爲命令添加一個mongodb查詢,因此如果您的集合數據支持它,您可以產生N個不同的mongoexport進程,將其結果導入其他程序並減少遷移過程的總運行時間。

後來,我上傳的文件到S3,並進行復制到相關的表。
這應該是一個非常簡單的解決方案。

13

我寫了一些代碼從Mixpanel的數據導出到紅移爲客戶端。最初,客戶端正在向Mongo出口,但我們發現Redshift爲查詢提供了非常大的性能改進。因此,首先我們將數據從Mongo傳輸到Redshift,然後我們提出了一個直接的解決方案,將數據從Mixpanel傳輸到Redshift。

要存儲在紅移JSON數據首先你需要創建一個SQL DDL到模式存儲在紅移即一個CREATE TABLE腳本。

您可以使用一個工具,如Variety幫助,因爲它可以給你一些洞察到你的蒙戈架構。然而,它確實與大數據集爭執 - 您可能需要對數據集進行二次抽樣。

備選地DDLgenerator可以從各種來源,包括CSV或JSON產生DDL。這也與大數據集爭執(我所處理的數據集是120GB)。

因此理論上您可以使用MongoExport從Mongo生成CSV或JSON,然後通過DDL生成器運行它以獲取DDL。

實際上,我發現使用JSON導出更容易一些,因爲您不需要指定要提取的字段。您需要選擇JSON數組格式。具體做法是:

mongoexport --db <your db> --collection <your_collection> --jsonArray > data.json 
    head data.json > sample.json 
    ddlgenerator postgresql sample.json  

這裏 - 因爲我使用head - 我用的是數據的樣本顯示過程的工作。但是,如果數據庫具有架構變體,則需要基於整個數據庫計算架構,這可能需要幾個小時。

接下來將數據上傳到紅移

如果您已經導出JSON,你需要使用紅移的Copy from JSON功能。你需要define a JSONpath來做到這一點。

欲瞭解更多信息,請查閱Snowplow博客 - they use JSONpaths to map the JSON on to a relational schema。看到他們的blog post about why people might want to read JSON to Redshift

開啓JSON成列允許比other approaches例如更快的查詢與使用JSON EXTRACT PATH TEXT

對於增量備份,它取決於數據是否被添加或數據是否正在改變。對於分析,通常是前者。我使用的方法是每天導出一次分析數據,然後以增量方式將其複製到Redshift中。

這裏有一些相關的資源,雖然最終我沒有使用它們:

5

老實說,我在這裏推薦使用第三方。我使用了Panoply(panoply.io)並會推薦它。它會把你的mongo系列收集起來,並用紅移將它們壓平成他們自己的表格。

0

以csv格式將數據從mongodb逐步導出到csv文件。 使用紅移複製命令將csv文件複製到紅移。