使用CodeIgniter插入AWS DynamoDB的大型记录

时间:2013-09-19 14:26:49

标签: php codeigniter amazon-web-services

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

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

3 个答案:

答案 0 :(得分:0)

请查看batch inserts,查看CLI

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

  6. CLI应该“永远”运行它没有时间限制,也可以查看here

答案 1 :(得分:0)

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

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

您是通过BatchWriteItem API使用单个请求还是通过WriteRequestBatch API使用批量投放?您应该阅读并使用后者。

但是,执行此操作的最佳方法是使用作为AWS SDK for PHP的一部分提供的BatchWriteItem抽象。它在内部使用{{1}} API,并对请求进行排队和管理,以确保写入所有项目。请参阅Using the WriteRequestBatchAWS SDK for PHP User Guide部分。

答案 2 :(得分:0)

在进行批量数据加载时,要记住Amazon DynamoDB的另一个问题是您在唯一的哈希键值上分配写入。如果您的数据按哈希键值排序,并且您有10,000个项目都是一个接一个地使用相同的哈希键,那么顺序上传数据可能会造成不均衡的工作负载,从而导致限制。要充分利用DynamoDB中的吞吐量,最好将写入均匀地分布在哈希键上。在实践中,这可能涉及将您的文件分解为许多单独的文件(如Kyslik上面提到的那样),并且并行地并且无序地上传它们。

DynamoDB Developer Guide Best Practices提供了更多详情,尤其是Distribute Write Activity During Data Upload