我正在考虑将大型数据库迁移到亚马逊的DynamoDB(想想1.5亿多条记录)。 我目前正在Elasticsearch中存储这些记录。
我正在阅读Data Pipeline,您可以使用TSV,CSV或JSON文件从S3导入DynamoDB。
似乎最好的方法是使用JSON文件,我发现了两个应该如何构建的示例:
{"Name"ETX {"S":"Amazon DynamoDB"}STX"Category"ETX {"S":"Amazon Web Services"}}
{"Name"ETX {"S":"Amazon push"}STX"Category"ETX {"S":"Amazon Web Services"}}
{"Name"ETX {"S":"Amazon S3"}STX"Category"ETX {"S":"Amazon Web Services"}}
{"Name": {"S":"Amazon DynamoDB"},"Category": {"S":"Amazon Web Services"}}
{"Name": {"S":"Amazon push"},"Category": {"S":"Amazon Web Services"}}
{"Name": {"S":"Amazon S3"},"Category": {"S":"Amazon Web Services"}}
所以,我的问题如下:
我希望第一次能够做到这一点并且不会产生额外的费用,因为当您在设置中对错时显然会收取费用。
我非常感谢我错过的手册的任何特定部分/链接。
答案 0 :(得分:1)
我现在正在做这件事。实际上,我使用数据管道提取了3.4亿行,使用Lambda对其进行了转换,现在正在使用管道导入它们。
几件事:
1)JSON是一种不错的选择。
2)在导出时,AWS将每个文件限制为100,000条记录。不知道这是必需的还是只是设计决定。
3)为了使用导入管道,需要具有清单文件。这对我来说是个新闻。我有一个出口的例子,而您没有。没有它,您的导入可能无法正常工作。它的结构是:
{"name":"DynamoDB-export","version":3,
"entries": [
{"url":"s3://[BUCKET_NAME]/2019-03-06-20-17-23/dd3906a0-a548-453f-96d7-ee492e396100-transformed","mandatory":true},
...
]}
4)Calorious'Blog的格式正确。我不确定“ S”是否需要小写-全部都是小写。这是我的导入文件中的示例行:
{"x_rotationRate":{"s":"-7.05723"},"x_acceleration":{"s":"-0.40001"},"altitude":{"s":"0.5900"},"z_rotationRate":{"s":"1.66556"},"time_stamp":{"n":"1532710597553"},"z_acceleration":{"s":"0.42711"},"y_rotationRate":{"s":"-0.58688"},"latitude":{"s":"37.3782895682606"},"x_quaternion":{"s":"-0.58124"},"x_user_accel":{"s":"0.23021"},"pressure":{"s":"101.0524"},"z_user_accel":{"s":"0.02382"},"cons_key":{"s":"index"},"z_quaternion":{"s":"-0.48528"},"heading_angle":{"s":"-1.000"},"y_user_accel":{"s":"-0.14591"},"w_quaternion":{"s":"0.65133"},"y_quaternion":{"s":"-0.04934"},"rotation_angle":{"s":"221.53970"},"longitude":{"s":"-122.080872377186"}}
答案 1 :(得分:0)
我会手动输入几行并使用数据管道导出它们以查看它生成的确切格式;如果您要进行导入,那么它将是您需要遵循的相同格式(我认为这是您示例中的第一种格式)。
然后我会设置一个包含少量行(100个可能)的文件并运行data-pipepline以确保它正常工作。
将文件分成块对我来说听起来不错,它可以帮助您从失败中恢复,而不必重新开始。
确保没有具有空值,空值或未定义值的键。这将彻底打破并停止导入。当您从当前数据库导出条目时,可以省略没有值的键或设置默认的非空值。
答案 2 :(得分:0)
根据我的经验,我推荐JSON作为最可靠的格式,当然,假设您生成的JSON blob是格式正确的JSON对象(即正确的转义)。
如果你可以生成有效的JSON,那就去那条路!