Mongodb红移

AJ2*_*222 10 mongodb amazon-redshift

我们在mongodb中有一些我们希望转移到redshift的集合(每天自动增量).我们怎么做?我们应该将mongo导出到csv吗?

Mar*_*ler 17

我编写了一些代码,用于将数据从Mixpanel导出到Redshift中以供客户端使用.最初客户端正在导出到Mongo,但我们发现Redshift为查询提供了非常大的性能改进.首先,我们将数据从Mongo传输到Redshift,然后我们想出了一个直接的解决方案,将数据从Mixpanel传输到Redshift.

要首先在Redshift中存储JSON数据,您需要创建一个SQL DDL来将模式存储在Redshift中,CREATE TABLE脚本.

您可以使用Variety之类的工具来帮助您,因为它可以让您深入了解Mongo架构.但是它确实很难处理大数据集 - 您可能需要对数据集进行二次采样.

或者,DDLgenerator可以从各种来源生成DDL,包括CSV或JSON.这也困扰着大型数据集(我正在处理的数据集是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       
Run Code Online (Sandbox Code Playgroud)

这里 - 因为我正在使用head- 我使用数据样本来显示流程的工作原理.但是,如果数据库具有架构变体,则需要基于整个数据库计算架构,这可能需要几个小时.

接下来,将数据上传到Redshift.

如果已导出JSON,则需要使用Redshift的JSON复制功能.您需要定义一个JSONpath来执行此操作.

欲了解更多信息,请查阅扫雪博客- 他们使用JSONpaths到JSON映射到一个关系模式.查看他们的博客文章,了解人们为什么要将JSON读取到Redshift.

开启JSON成列允许比快得多查询其他方法,如使用JSON EXTRACT PATH TEXT.

对于增量备份,它取决于是添加数据还是数据正在更改.对于分析,它通常是前者.我使用的方法是每天导出一次分析数据,然后以增量方式将其复制到Redshift中.

这里有一些相关的资源,但最后我没有使用它们:


San*_*ani 5

老实说,我建议在这里使用第三方.我使用过Panoply(panoply.io)并推荐它.它会把你的mongo收藏品变成他们在红移中的表格.


aks*_*aks 0

了解一些有帮助的问题是:

  1. 这是仅添加的始终增加的增量同步,即仅添加数据而不更新/删除数据,或者您的 redshift 实例仅对添加感兴趣?
  2. 由于删除/更新发生在源头并且未馈送到 Redshift 实例而导致的数据不一致是否正常?
  3. 它是否需要每天增量批量,或者也可以是实时的吗?

根据您的情况,mongoexport 可能适合您,但您必须了解它的缺点,可以在http://docs.mongodb.org/manual/reference/program/mongoexport/找到。