0

我有一个包含大约 400000 行的 csv 文件,我需要处理并插入到 AWS DynamoDB 表中。最好的方法是什么?

我尝试使用 foreach 和 PutRequest 它只创建了大约 6348 行。有什么需要我照顾的吗?

4

3 回答 3

0

使用 Amazon DynamoDB,如果您超过了预置的吞吐量,请求将会失败。如果您的 DynamoDB 表配置了 Amazon CloudWatch,您应该能够通过转到 AWS 管理控制台查看是否是这种情况。您是否需要增加写入吞吐能力?

您是否使用适用于 PHP 的 AWS 开发工具包?如果是这样,那么您的单个PutItem请求将在失败时重试几次,但如果由于超出您的吞吐量而不断被拒绝,SDK 最终也会放弃。

您是通过 API 使用单个请求PutItem还是通过 API 使用批量 put BatchWriteItem?您可能应该阅读并使用后者。

但是,最好的方法是使用WriteRequestBatch作为 PHP 的 AWS 开发工具包的一部分提供的抽象。它在BatchWriteItem内部使用 API,还对请求进行排队和管理,以确保所有项目都被写入。请参阅AWS SDK for PHP 用户指南的使用 WriteRequestBatch部分。

于 2013-09-20T17:25:24.527 回答
0

在进行批量数据加载时,使用 Amazon DynamoDB 时要记住的另一件事是跨唯一哈希键值的写入分布。如果你的数据是按照hash key值排序的,10000个item一个接一个hash key相同,那么按顺序上传数据会造成工作量不均,从而造成限流。为了充分利用 DynamoDB 中的吞吐量,最佳实践是将写入均匀分布在哈希键上。在实践中,这可能涉及将您的文件分解为许多单独的文件(如 Kyslik 上面提到的),并以并行和无序的方式上传它们。

DynamoDB 开发人员指南最佳实践中提供了更多详细信息,尤其是在数据上传期间分发写入活动

于 2013-09-20T23:45:13.203 回答
0

请看看批量插入,看看CLI

  1. 限制您的插入(每个脚本加载 4k?)并通过 CLI 运行它
  2. 在单独的文件中创建批次并将它们(批次)一一插入。
  3. 明天做
  4. 或前两个的组合

CLI 应该“永远”运行它没有时间限制,也可以在这里查看

于 2013-09-19T14:55:10.360 回答