【问题标题】:Mongodb to redshiftMongoDB到红移
【发布时间】:2014-02-19 19:10:07
【问题描述】:

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

【问题讨论】:

标签: mongodb amazon-redshift


【解决方案1】:

有几个问题需要了解:

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

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

【讨论】:

    【解决方案2】:

    我不得不解决同样的问题(虽然不是每天)。 如前所述,您可以使用 mongoexport 导出数据,但请记住,redshift 不支持数组,因此如果您的集合数据包含数组,您会发现它有点问题。

    我对此的解决方案是将 mongoexport 导入我编写的一个小型实用程序中,该程序将 mongoexport json 行转换为我想要的 csv 输出。 管道输出还允许您使过程并行。

    Mongoexport 允许您向命令添加 mongodb 查询,因此如果您的集合数据支持它,您可以生成 N 个不同的 mongoexport 进程,将其结果通过管道传输到其他程序并减少迁移过程的总运行时间。

    后来,我将文件上传到 S3,并在相关表中执行了 COPY。
    这应该是一个非常简单的解决方案。

    【讨论】:

      【解决方案3】:

      我为客户端编写了一些代码来将数据从 Mixpanel 导出到 Redshift。最初客户端导出到 Mongo,但我们发现 Redshift 为查询提供了非常大的性能改进。所以首先我们将数据从 Mongo 转移到 Redshift,然后我们想出了一个直接的解决方案,将数据从 Mixpanel 转移到 Redshift。

      首先要将 JSON 数据存储在 Redshift 中,您需要创建一个 SQL DDL 以将架构存储在 Redshift 中,即 CREATE TABLE 脚本。

      您可以使用Variety 之类的工具来提供帮助,因为它可以让您深入了解您的 Mongo 架构。然而,它确实难以处理大数据集——您可能需要对数据集进行二次抽样。

      另外,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 - 我使用数据样本来展示流程的工作原理。但是,如果您的数据库有模式变化,您希望基于整个数据库计算模式,这可能需要几个小时。

      接下来您将数据上传到 Redshift

      如果您已导出 JSON,则需要使用 Redshift 的 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。

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

      【讨论】:

        【解决方案4】:

        老实说,我建议在这里使用第三方。我用过 Panoply (panoply.io) 并且会推荐它。它会将您的 mongo 集合并以 redshift 将它们展平到自己的表中。

        【讨论】:

          【解决方案5】:

          AWS Database Migration Service(DMS) 增加了对 MongoDB 和 Amazon DynamoDB 的支持。所以我认为现在从 MongoDB 迁移到 Redshift 的最佳选择是 DMS。

          • MongoDB 版本 2.6.x 和 3.x 作为数据库源
          • 支持文档模式和表格模式
          • 支持变更数据捕获 (CDC)

          详情 - http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MongoDB.html

          【讨论】:

            【解决方案6】:

            Stitch Data 是我见过的最好的工具,只需点击几下几分钟即可从 MongoDB 增量复制到 Redshift。

            自动动态检测 DML、DDL 以进行复制。

            【讨论】:

            • 仅供参考,这个问题已经有将近 7 年的历史了。
            • @VirtualAnomaly 谢谢,刚刚分享给其他人帮忙。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-04-22
            • 1970-01-01
            • 1970-01-01
            • 2018-03-11
            • 1970-01-01
            相关资源
            最近更新 更多