对Amazon DynamoDB(PHP API)的写入速度非常慢

Yur*_*riy 15 php amazon-web-services amazon-dynamodb

此问题已在AWS论坛上发布,但尚未得到答复https://forums.aws.amazon.com/thread.jspa?threadID=94589

我正在尝试执行一个很长的短项目列表(大约1.2亿个)的初始上传,以后通过唯一键检索它们,这似乎是DynamoDb的完美案例.

但是,我目前的写入速度非常慢(每100次写入大约8-9秒),这使得初始上传几乎不可能(以当前速度花费大约3个月).

我已阅读AWS论坛寻找答案,并已尝试以下事项:

  1. 我从单个"put_item"调用切换到25个项目的批量写入(建议的最大批量写入大小),并且我的每个项目都小于1Kb(这也是建议).即使我的25个项目也低于1Kb也是非常典型的,但是不能保证(并且无论如何都不重要,因为我理解只有单个项目大小对DynamoDB很重要).

  2. 我使用最近引入的欧盟地区(我在英国)通过调用set_region('dynamodb.eu-west-1.amazonaws.com')直接指定其入口点,因为在PHP中显然没有其他方法可以做到这一点. API.AWS控制台显示该表位于适当的区域,以便工作.

  3. 我通过调用disable_ssl()来禁用SSL(每100条记录获得1秒).

仍然,一个包含100个项目的测试集(4个批次写入调用25个项目)的索引编制时间不会少于8秒.每个批处理写请求大约需要2秒,因此它不像第一个是即时的,随后的请求会很慢.

我的表配置吞吐量是100写入和100个读取单位到目前为止应该足够(尝试更高的限制,以防万一,没有影响).

我也知道请求序列化有一些费用,所以我可以使用队列来"累积"我的请求,但这对batch_writes来说真的那么重要吗?而且我认为这不是问题,因为即使是单个请求也需要太长时间.

我发现有些人修改了API中的cURL标题(特别是"Expect:")以加快请求速度,但我不认为这是一种正确的方法,而且自从发布该建议后API也已更新.

我的应用程序运行的服务器也很好 - 我读过有时CPU负载通过屋顶,但在我的情况下一切都很好,这只是网络请求需要太长时间.

我现在被困住了 - 还有什么我可以尝试的吗?如果我没有提供足够的信息,请随时询问更多信息.

还有其他最近的线程,显然是在同一个问题上,这里(到目前为止没有答案).

这项服务应该是超快的,所以我在一开始就对这个问题感到困惑.

Rob*_*bie 10

如果您从本地计算机上传,速度将受到您与服务器之间的各种流量/防火墙等的影响.如果我打电话给DynamoDB,每个请求只需要0.3秒,因为有时间往返澳大利亚.

我的建议是用PHP创建自己的EC2实例(服务器),将脚本和所有文件作为块上传到EC2服务器,然后从那里进行转储.EC2服务器shuold对DynamoDB服务器的速度很快.

如果您对自己使用LAMP设置EC2没有信心,那么他们会有一个新服务"Elastic Beanstalk"可以为您完成所有操作.当您完成上传后,只需刻录服务器 - 希望您可以在其"免费套餐"定价结构中完成所有这些操作:)

不解决连接的长期问题,但会减少上传三个月!