我們在MongoDB中,我們希望轉移到紅移(自動增量每天的基礎上)的幾個集合。 我們該怎麼做?我們應該將mongo導出到csv嗎?MongoDB的紅移
回答
這將有助於瞭解的幾個問題是:
- 這是隻添加一個插件始終只能增加增量同步,即數據並沒有更新/刪除或者說你的紅移實例只對增加感興趣?
- 數據不一致是由於刪除/更新發生在源頭而沒有被送入redshift實例嗎?
- 它是否需要日常增量批處理,或者它是否可以實時發生?
根據您的情況,mongoexport可能適合您,但您必須瞭解它的缺點,您可以在http://docs.mongodb.org/manual/reference/program/mongoexport/找到它的缺點。
我不得不解決同樣的問題(不是每天都有)。 as ask mentioned,您可以使用mongoexport來導出數據,但請記住紅移不支持數組,所以萬一您的集合數據包含數組,您會發現它有點問題。
我對這個解決方案是管mongoexport成一個小工具程序我寫的變換mongoexport JSON行到我期望的CSV輸出。 管道輸出也允許您使過程平行。
Mongoexport允許您爲命令添加一個mongodb查詢,因此如果您的集合數據支持它,您可以產生N個不同的mongoexport進程,將其結果導入其他程序並減少遷移過程的總運行時間。
後來,我上傳的文件到S3,並進行復制到相關的表。
這應該是一個非常簡單的解決方案。
我寫了一些代碼從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中。
這裏有一些相關的資源,雖然最終我沒有使用它們:
- Spotify的有一個叫路易吉一個開源項目 - this code要求上傳JSON來紅移,但我沒有用它,我不知道它是否有效。
- Amiato有一個網頁,表示他們提供了一個將JSON數據加載到Redshift的商業解決方案 - 但除此之外沒有太多信息。
- This blog post討論在JSON數據源(如Mixpanel到Redshift)上執行ETL。
- Related Redit question
- Blog post about dealing with JSON arrays in Redshift
老實說,我在這裏推薦使用第三方。我使用了Panoply(panoply.io)並會推薦它。它會把你的mongo系列收集起來,並用紅移將它們壓平成他們自己的表格。
AWS數據庫遷移服務(DMS)將支持MongoDB的和Amazon DynamoDB.So我覺得現在起,從MongoDB中遷移到紅移最好的選擇是DMS。
- MongoDB的版本的2.6.x和3.x作爲數據庫源
- 文檔模式和表模式支持
- 支持變更數據捕獲(CDC)
詳細 -http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MongoDB.html
以csv格式將數據從mongodb逐步導出到csv文件。 使用紅移複製命令將csv文件複製到紅移。
- 1. 節點紅色MongoDB
- 2. MongoDB的紅寶石日期
- 3. 在紅移
- 4. PERCENTILE_CONT()在紅移
- 5. 上紅移
- 6. 在紅移列
- 7. REGEX_SUBSTR紅移
- 8. 撤消紅移
- 9. 在紅移
- 10. 紅移與COPY
- 11. CopyCommand紅移
- 12. 紅移插槽
- 13. MongoDB遷移
- 14. 紅移在新表
- 15. 編碼在紅移
- 16. Boto3 - 描述紅移
- 17. 如何在紅移
- 18. generate_series()方法紅移
- 19. 無法從紅移
- 20. 換位表紅移
- 21. AWS紅移DEFAULT TIMESTAMP
- 22. 不能在紅移
- 23. listagg與紅移DISTINCT
- 24. 紅移VARCHAR太窄
- 25. [R紅移dbExistTable dbWriteTable
- 26. 重疊功能的紅移
- 27. 帶SSIS/SSDT的紅移
- 28. 更新的紅移表
- 29. 列值的紅移產品
- 30. 紅移不可替代的
我認爲如果人們想投票,爲什麼要添加評論會有幫助? –
相關問題在這裏:http://stackoverflow.com/questions/23835567/copying-json-objects-with-multiple-layouts-from-s3-int-redshift –
另一個相關的問題http://stackoverflow.com/questions/ 24878374 /出口JSON數據並加載 - 到 - 一的關係數據庫 –