【问题标题】:Copying data from MySQL to Amazon DynamoDB将数据从 MySQL 复制到 Amazon DynamoDB
【发布时间】:2015-01-23 06:47:17
【问题描述】:

我在 MySQL 中有一个包含 5 亿条记录的表。我想将此表导入 Amazon DynamoDB。我知道有两种方法可以做到:

  1. JAVA Api:这种方法的问题是速度很慢,而且有时会断开与数据库的连接。

  2. Amazon 数据导入管道:看起来很有希望,但是如何将数据从 MySQL 导出为 DynamoDB 可识别的格式?

请告诉我两者之间的最佳方法。

【问题讨论】:

    标签: mysql amazon-web-services amazon-dynamodb


    【解决方案1】:

    AWS 有两种服务可以帮助您执行该操作。

    • 数据管道
    • 带有 Hive 的 EMR 集群

    数据管道

    一个非常简单的方法——如果你的“模式”相似(我总是觉得谈论 DynamoDB 的模式)——从 MySQL 导出到 S3,然后从 S3 导入到 DynamoDB。

    Data Pipeline 有两个教程可帮助您设置任务

    http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-copydata-mysql.html http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-importexport-ddb-part1.html

    您可以通过开发一个执行导入和导出的管道来进一步改进此过程。如果您需要在导入和导出之间转换数据,则需要开发转换代码并从管道中执行。

    在 Data Pipeline 术语中,这称为 Activity。活动可能像 shell 脚本一样简单,也可能像在 EMR 关闭器上运行的 Hive / Hadoop / Pig 应用程序一样复杂。 http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-concepts-activities.html

    Data Pipeline 还可以让您定期安排执行。

    Hive 和 EMR

    Hive 是一个 hadoop 工具,用于编写 SQL 命令来操作数据源。 Hive 在集群上运行的 Hadoop 应用程序中转换 SQL。 您可以在 AWS Elastic Map Reduce Cluster(托管服务 hadoop 集群)上运行 Hive。

    EMR 上的 Hive 可以连接到非关系数据源,例如 S3 或 DynamoDB 数据库上的文件。它允许您在 DynamoDB 之上编写 SQL 语句!

    在您的用例中,您需要编写一个从 MySQL 读取并写入 DynamoDB 的 Hive 脚本。您可以使用标准 (Hive) SQL 表达式转换数据。

    有关 EMR 上 Hive 的更多信息: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-hive.html

    有关 DynamoDB 和 Hive 的更多信息: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Walkthrough.html http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/EMRforDynamoDB.html

    【讨论】:

      【解决方案2】:

      我发现对我来说最简单的方法是编写一个脚本,以此处指定的格式将所有信息传输到 json 文件中:AWS Load Data

      {
          "ProductCatalog": [
              {
                  "PutRequest": {
                      "Item": {
                          "Id": {
                              "N": "101"
                          },
                          "Title": {
                              "S": "Book 101 Title"
                          },
                          "ISBN": {
                              "S": "111-1111111111"
                          },
                          "Authors": {
                              "L": [
                                  {
                                      "S": "Author1"
                                  }
                              ]
                          },
                          "Price": {
                              "N": "2"
                          },
                          "Dimensions": {
                              "S": "8.5 x 11.0 x 0.5"
                          },
                          "PageCount": {
                              "N": "500"
                          },
                          "InPublication": {
                              "BOOL": true
                          },
                          "ProductCategory": {
                              "S": "Book"
                          }
                      }
                  }
              },
              {
                  "PutRequest": {
                      "Item": {
                          "Id": {
                              "N": "103"
                          },
                          "Title": {
                              "S": "Book 103 Title"
                          },
                          "ISBN": {
                              "S": "333-3333333333"
                          },
                          "Authors": {
                              "L": [
                                  {
                                      "S": "Author1"
                                  },
                                  {
                                      "S": "Author2"
                                  }
                              ]
                          },
                          "Price": {
                              "N": "2000"
                          },
                          "Dimensions": {
                              "S": "8.5 x 11.0 x 1.5"
                          },
                          "PageCount": {
                              "N": "600"
                          },
                          "InPublication": {
                              "BOOL": false
                          },
                          "ProductCategory": {
                              "S": "Book"
                          }
                      }
                  }
              },
              {
                  "PutRequest": {
                      "Item": {
                          "Id": {
                              "N": "205"
                          },
                          "Title": {
                              "S": "18-Bike-204"
                          },
                          "Description": {
                              "S": "205 Description"
                          },
                          "BicycleType": {
                              "S": "Hybrid"
                          },
                          "Brand": {
                              "S": "Brand-Company C"
                          },
                          "Price": {
                              "N": "500"
                          },
                          "Color": {
                              "L": [
                                  {
                                      "S": "Red"
                                  },
                                  {
                                      "S": "Black"
                                  }
                              ]
                          },
                          "ProductCategory": {
                              "S": "Bicycle"
                          }
                      }
                  }
              }
          ]
      }
      

      然后创建表并从我的控制台运行代码

      aws dynamodb batch-write-item --request-items file://ProductCatalog.json
      

      下载和配置 aws cli :https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.CLI.html

      【讨论】:

        【解决方案3】:

        除了其他答案,我想提一下,dynamodb 可以识别csvtsv 格式文件进行导入。我们还可以通过 Elastic Map Reduce 使用 HIVE sql 从csv 文件中批量加载数据。我们唯一需要考虑的是——如果我们使用windows将table转储到csv,那么我们必须确保windows系统\r\n的行尾替换为\n以使其与amazon兼容。

        【讨论】:

        • 感谢您完成我的回答@Prabhu。我也提到了HIVE。请注意,将 \r\n 转换为 \n 不是亚马逊的要求,但 \n 是 Unix 系统和 Linux 的行终止标准。
        • 这总是一种痛苦!无处不在
        【解决方案4】:

        如果您有像 PhpMyAdmin 这样的门户,您可以轻松地将数据导出JSON 格式。

        接下来您手动创建表。

        最后,您可以使用Dynabase 将 JSON 文件导入 DynamoDB 表。尽管 Dynabase 是一个商业工具,但它确实可以解锁所有必需的功能,即使是试用许可证。

        MySQL JSON 导出有时还存储有关表的附加信息。如有必要,我会手动编辑文件以保留文件的数据部分。我导入的 JSON 文件在其根目录中有一个数组,例如

        [ 
          { "id": 1 , "foo" : "bar" }, 
          { "id": 361, "foo" : "baz" } 
        ]
        

        您可能不需要转换数据的格式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-12
          • 1970-01-01
          相关资源
          最近更新 更多