我有一个包含大约 400000 行的 csv 文件,我需要处理并插入到 AWS DynamoDB 表中。最好的方法是什么?
我尝试使用 foreach 和 PutRequest 它只创建了大约 6348 行。有什么需要我照顾的吗?
我有一个包含大约 400000 行的 csv 文件,我需要处理并插入到 AWS DynamoDB 表中。最好的方法是什么?
我尝试使用 foreach 和 PutRequest 它只创建了大约 6348 行。有什么需要我照顾的吗?
使用 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部分。
在进行批量数据加载时,使用 Amazon DynamoDB 时要记住的另一件事是跨唯一哈希键值的写入分布。如果你的数据是按照hash key值排序的,10000个item一个接一个hash key相同,那么按顺序上传数据会造成工作量不均,从而造成限流。为了充分利用 DynamoDB 中的吞吐量,最佳实践是将写入均匀分布在哈希键上。在实践中,这可能涉及将您的文件分解为许多单独的文件(如 Kyslik 上面提到的),并以并行和无序的方式上传它们。
DynamoDB 开发人员指南最佳实践中提供了更多详细信息,尤其是在数据上传期间分发写入活动