将数据从MySQL复制到Amazon DynamoDB

时间:2015-01-23 06:47:18

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

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

  1. JAVA Api:这种方法的问题在于它很慢,有时也会丢失与数据库的连接。

  2. 亚马逊数据导入管道:似乎很有希望,但如何将数据从MySQL导出到DynamoDB识别的格式?

  3. 请让我在两者之间采取最佳方法。

3 个答案:

答案 0 :(得分:7)

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

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

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

Data Pipeline还允许您定期安排执行。

Hive和EMR

Hive是一个编写SQL命令来操作数据源的hadoop工具。 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

答案 1 :(得分:0)

除了其他答案,我想提一下,dynamodb会识别csvtsv格式文件以进行导入。我们还可以使用Elastic Map Reduce的HIVE sql批量加载csv文件中的数据。我们唯一需要考虑的是 - 如果我们使用窗口将表转储到csv,那么我们必须确保将Windows系统\r\n的行结尾替换为\n以使其成为可能符合亚马逊。

答案 2 :(得分:0)

我发现对我来说,最简单的方法是编写一个脚本,以此处指定的格式将所有信息传输到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