Php 使用CodeIgniter插入AWS DynamoDB的大型记录
我有一个大约400000行的csv文件,需要处理并插入到AWS DynamoDB表中。最好的方法是什么 我尝试使用foreach和PutRequest,它只创建了大约6348行。有什么我需要照顾的吗 请看一看,看一看Php 使用CodeIgniter插入AWS DynamoDB的大型记录,php,codeigniter,amazon-web-services,Php,Codeigniter,Amazon Web Services,我有一个大约400000行的csv文件,需要处理并插入到AWS DynamoDB表中。最好的方法是什么 我尝试使用foreach和PutRequest,它只创建了大约6348行。有什么我需要照顾的吗 请看一看,看一看 限制插入(每个脚本加载4k),并通过CLI运行它 在单独的文件中创建批并逐个插入(批) 明天做 或前2项的组合 CLI应该“永远”运行。它没有时间限制,也可以查看一下。对于Amazon DynamoDB,如果您的吞吐量超过了设置的吞吐量,则请求将失败。如果您的DynamoDB表是
CLI应该“永远”运行。它没有时间限制,也可以查看一下。对于Amazon DynamoDB,如果您的吞吐量超过了设置的吞吐量,则请求将失败。如果您的DynamoDB表是使用amazoncloudwatch配置的,那么您应该能够通过转到AWS管理控制台来查看情况是否如此。是否需要增加写入吞吐量 您是否正在使用用于PHP的AWS SDK?如果是这样,那么您的单个
PutItem
请求如果失败,将重试几次,但是如果SDK由于超出您的吞吐量而不断被拒绝,它也将最终放弃
您是通过PutItem
API使用单个请求,还是通过BatchWriteItem
API使用批量put?你可能应该阅读并使用后者
但是,最好的方法是使用AWS SDK for PHP附带的
WriteRequestBatch
抽象。它在内部使用BatchWriteItem
API,并对请求进行排队和管理,以确保所有项都被写入。当执行大容量数据加载时,Amazon DynamoDB需要记住的另一件事是在唯一散列键值上分布写操作。如果您的数据是按散列键值排序的,并且您有10000个项目一个接一个地使用相同的散列键值,那么按顺序上载数据可能会造成不均匀的工作负载,从而导致限制。为了在DynamoDB中充分利用吞吐量,最好的做法是将写操作均匀地分布在散列键上。在实践中,这可能涉及到将您的文件分解为多个单独的文件(正如Kyslik上面提到的),然后并行地、无序地上传它们
更多详细信息请参见,特别是use insert_批次400K行没有那么大,应该可以。我在CI中使用过此批次_insert,但它是否适用于AWS DynamoDB?是的,Dzavid,我经历过这种情况。谢谢你的提示。嗨,杰里米,我用过BatchWriteItem,它很管用。:)感谢您的澄清。是否可以使用“代码”扫描查询检索它们?想用GROUPBY方法检索它们吗?我不确定您想做什么,或者在非关系数据库的上下文中“GROUPBY”是什么意思。我建议您查看AWS文档,了解更多有关扫描与查询的信息,不过: