我有一个大约400000行的csv文件,我需要处理并插入AWS DynamoDB表。最好的方法是什么?
我尝试使用foreach和PutRequest,它只创建了大约6348行。有什么我需要照顾的吗?
答案 0 :(得分:0)
请查看batch inserts,查看CLI。
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 WriteRequestBatch的AWS SDK for PHP User Guide部分。
答案 2 :(得分:0)
在进行批量数据加载时,要记住Amazon DynamoDB的另一个问题是您在唯一的哈希键值上分配写入。如果您的数据按哈希键值排序,并且您有10,000个项目都是一个接一个地使用相同的哈希键,那么顺序上传数据可能会造成不均衡的工作负载,从而导致限制。要充分利用DynamoDB中的吞吐量,最好将写入均匀地分布在哈希键上。在实践中,这可能涉及将您的文件分解为许多单独的文件(如Kyslik上面提到的那样),并且并行地并且无序地上传它们。
DynamoDB Developer Guide Best Practices提供了更多详情,尤其是Distribute Write Activity During Data Upload