【问题标题】:What will be an efficient way to Export existing old DynamoDB tables to S3 bucket?将现有旧 DynamoDB 表导出到 S3 存储桶的有效方法是什么?
【发布时间】:2021-05-18 20:17:24
【问题描述】:

我的意思是,这些表是在 2020 年每天创建的,我想将它们保存到 S3 并从 DynamoDB 中删除。我遇到了一些可以实现它的方法,我想知道哪种方法在我的情况下可以有效地工作。

注意:这些表的大小约为 1GB,大约有 1,00,000 多个项目。

  1. 导出到 DynamoDB 提供的 S3 功能。如何从 Python 脚本实现它。使用什么 boto3 Api?
  2. Kinesis Data Stream 可以工作吗?因为桌子上不会发生现场活动。我们可以将现有表推送到流媒体吗?并使用 Amazon Firehose 将其导出。
  3. 使用 Amazon Elastic Map Reduce 导出到 S3。

请分享您对这些的看法,并提及任何其他方式(如果有)。谢谢!感谢您的时间。

更新:我使用了 Export to S3,但它将表保存在四个不同的 json 文件中。需要时将其从 S3 导入回 DynamoDB 是否容易?

【问题讨论】:

  • 有什么理由让你在 S3 中使用它吗?
  • 其实为了继续使用 DynamoDB 表限制,我想删除旧表。但在此之前需要备份。因此将其保存到 S3 存储桶中。有没有其他办法?
  • 为什么不直接使用 DynamoDB 备份?您可以备份该表,然后将其删除。如果您再次需要它,您可以从备份中恢复。
  • 如果源表被删除,会不会被删除?如果没有,那么我们可以进行多少备份是否有任何限制。因为重点不是扩展提供的表限制。
  • 删除表时不会被删除。事实上,如果您在控制台中删除一个表,它会询问您是否要先创建备份。我认为备份没有限制,但 DynamoDB 的大多数限制都是软限制,因此您可以请求增加。

标签: amazon-s3 amazon-dynamodb amazon-emr amazon-kinesis


【解决方案1】:

如果您为您的表启用了时间点恢复,您可以使用此 API 直接将其导出:https://docs.aws.amazon.com/cli/latest/reference/dynamodb/export-table-to-point-in-time.html

要手动进行导出,您需要使用 dynamodb 扫描操作。您可以使用 boto3 分页器https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Paginator.Scan 来处理分页。

【讨论】:

  • 我会尝试更新你的进展情况。我担心整个过程所需的时间。谢谢!
  • 如果需要,您可以使用分段扫描来加快速度。
  • 我使用了export-table-to-point in-time。对于 1.2 GB 的表大小,需要 4 分钟。它工作得很好。谢谢。还有一个查询,如何从 S3 导入回 dynamoDB?
  • 没有从 s3 导入到 dynamodb 的导入 API。您必须从 s3 获取对象,然后使用 dynamodb api 写入每条记录。(使用 batchWriteItem)。
【解决方案2】:

如果您确实需要在 S3 中导出到 S3 选项,它似乎是最佳选择。与 AWS 中的几乎所有内容一样,如果您可以在控制台中执行此操作,则可以通过 API 调用执行此操作。对于这一点,您需要使用ExportTableToPointInTime API,即boto中的export_table_to_point_in_time

【讨论】:

  • 谢谢@Jason!尝试后我会更新你。还有其他存储表格的方法吗?
  • 它工作了,但表数据被拆分为不同的 json 文件。如果需要,我们可以将其导入回 dynamodb 吗?
猜你喜欢
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 2021-06-22
相关资源
最近更新 更多